• 1
  • 2
2010-10-16, 12:22
  #13
Medlem
dethalvabarnets avatar
Varför har du skrivit addParticipant() som du gjort? it makes no sense whatsoever. förklara ordagrant varför du skrivit den som du har gjort.
Citera
2010-10-16, 12:51
  #14
Bannlyst
nvm, löste det
Citera
2010-10-18, 11:59
  #15
Bannlyst
Är nu i slutfasen av detta program och har stött på ett sista problem.

Lägger jag in ett antal deltagare och försöker ta bort någon som inte finns fungerar det som det ska.

Om jag däremot först tar bort någon som finns och därefter försöker ta bort någon som inte finns fungerar det inte. Får NullpointerExeption på rad 29 och 131.

Stirrar mig blind på all kod och kan inte se vart felet i programmet ligger.

Kod:
import java.util.Scanner;

public class bouleChampionship 
{

	public static void main(String[] args) 
	{
		Scanner keyboard = new Scanner(System.in);
		Participant[] participants = new Participant[20];
		int nrOfParticipants = 0;
		
		int choice = 1;
			
		while(choice != 0)
		{
			choice = menu(keyboard);
			switch(choice)
			{
			case 1:
				nrOfParticipants = addParticipants(participants, nrOfParticipants, keyboard);
				break;
			case 2:
				printParticipants(participants, nrOfParticipants);
				break;
			case 3:
				printParticipantsInSpecificTeam(keyboard, participants, nrOfParticipants);
				break;
			case 4:
				int removed = removeParticipant(keyboard, participants, nrOfParticipants);
				if(removed != 0)
				{
					System.out.println("Deltagaren har tagits bort");
				}
				else
				{
					System.out.println("Det finns ingen registrerad spelare med detta namn");
				}
				break;
			case 5:
				int position = findBestResult(participants, nrOfParticipants);
				participants[position].show();
				break;
			case 0:
				System.out.println("Du valde att avsluta!");
				break;
			}
		}
		
	}

	//Skriver ut menyn och hanterar användarens inmatning
	public static int menu(Scanner keyboard)
	{
		System.out.println("Bouletävling");
		System.out.println("\n1. Lägg till ny deltagare");
		System.out.println("2. Visa alla deltagare");
		System.out.println("3. Visa alla deltagare från viss klubb");
		System.out.println("4. Tag bort deltagare");
		System.out.println("5. Visa bästa resultat");
		System.out.println("0. Avsluta");
		System.out.println();
		System.out.print("Ditt val: ");
		
		int choice = keyboard.nextInt();
		keyboard.nextLine();
		
		return choice;
	}
	
	public static int addParticipants(Participant[] participants, int nrOfParticipants, Scanner keyboard)
	{
					
			System.out.print("Namn: ");
			String name = keyboard.nextLine();
			System.out.print("Klubb: ");
			String team = keyboard.nextLine();
			System.out.print("Resultat: ");
			int result = keyboard.nextInt();
			
			participants [nrOfParticipants] = new Participant(name, team, result);
		
		nrOfParticipants++;
		return nrOfParticipants;
		
	}
	
	public static void printParticipants(Participant[] participants, int nrOfParticipants)
	{
		for(int i = 0; i < nrOfParticipants; i++)
		{
			if(participants[i] != null)
			{
				participants[i].show();
			}
			
		}
	}
	
	public static void printParticipantsInSpecificTeam(Scanner keyboard, Participant[] participants, int nrOfParticipants)
	{
		System.out.print("Ange klubb: ");
		String team = keyboard.nextLine();
		
		boolean foundParticipant = false;
		
		for(int i = 0; i < nrOfParticipants; i++)
		{
			if(participants[i].getTeam().equalsIgnoreCase(team))
			{
				participants[i].show();
				foundParticipant = true;
			}
		}
		
		if(!foundParticipant)
		{
			System.out.println("Det finns tyvärr inga registrerade spelare i denna klubb ");
		}
		
	}
	
	public static int removeParticipant(Scanner keyboard, Participant[] participants, int nrOfParticipants)
	{
		int removed = 0;
		
		System.out.print("Ange namn: ");
		String name = keyboard.nextLine();
		
		for(int i = 0; i < nrOfParticipants; i++)
		{
			if(participants[i].getName().equalsIgnoreCase(name))
			{
				participants[i] = null;
				nrOfParticipants--;
				removed = 1;
			}
		}
		return removed;
	}
	
	public static int findBestResult(Participant[] participants, int nrOfParticipants)
	{
	
		int maxValue = 0;
		int position = -1;
		
		for(int i = 0; i < nrOfParticipants; i++)
		{
			if(participants[i].getResult() > maxValue)
			{
				position = i;
			}
		}
	return position;	
	}
}

Klassen Participant

Kod:
public class Participant 
{
	//Instansvariabler
	
	private String name;
	private String team;
	private int result;
	
	//Konstruktorer
	
	public Participant()
	{
		name = "Unknown";
		team = "Unknown";
		result = 0;
	}
	
	public Participant(String name, String team, int result)
	{
		this.name = name;
		this.team = team;
		this.result = result;
	}
	
	//Metoder
	//get-set
	public String getName() 
	{
		return name;
	}

	public void setName(String name) 
	{
		this.name = name;
	}

	public String getTeam() 
	{
		return team;
	}

	public void setTeam(String team) 
	{
		this.team = team;
	}

	public int getResult() 
	{
		return result;
	}

	public void setResult(int result) 
	{
		this.result = result;
	}
	
	
	//Övriga metoder
	public void show()
	{
		System.out.println("Namn: " + name);
		System.out.println("Klubb: " + team);
		System.out.println("Resultat: " + result);
		System.out.println();
	}
}
Citera
2010-10-18, 12:31
  #16
Medlem
Citat:
Ursprungligen postat av Lemorz
Är nu i slutfasen av detta program och har stött på ett sista problem.

RemoveParticipants ser inte bra ut. Du skickar in nrOfParticipants som parameter, och det blir en call by value eftersom det är en int, så den nrofParticipants du ändrar i metoden har ingen effekt utanför.

En lösning på detta vore att flytta de variabler du har lokala i main till static-private i klassen, och sluta skicka runt dem som parametrar.

Förutom detta, letar du efter en participant med ett visst namn och sätter fältet till null ibland.

När du då gör "participants[i].getName()" på ett null-at fält vid ett senare tillfälle kommer du få NullPointerException.

Detta sista kan du lösa genom att ändra till:

Kod:
if(participants[i] != null && participants[i].getName().equalsIgnoreCase(name))
Citera
2010-10-18, 13:45
  #17
Bannlyst
tack för hjälpen, upptäckte ytterligare ett fel i findBestResult(...). Den deltagare som har högst resultat är alltid den senast inlagda och så ska det ju inte vara... Bara att klura vidare
Citera
2013-08-14, 18:27
  #18
Medlem
Kursen som den här uppgiften kommer ifrån är kul, bra om man vill testa på en högskolekurs i Java. Har själv läst den och jag kan lägga in min uppgift, även om tråden startades för flera år sedan.

Kod:
import java.util.Scanner;

public class ATM  {

	public static void main(String[] args)
	{
		int arrayLength = 10;			
		int trans[] = new int[arrayLength]; 
		int balance = 1500;					
		int loop = 1;						

		while (loop == 1)					
		{
			int choice = menu();			
			if (choice == 1)				
			{
				int sumadd;					
				String sumadd2;				
				int choice3;				
          	int temp;					
     			Scanner input = new Scanner(System.in); 				
     			System.out.println("");					
    			System.out.print("Vänligen ange din insättning: ");	
				sumadd2 = input.next();										
				if (sumadd2 == null || sumadd2.length() == 0)		
				{
						System.out.println("Du har angivit en felaktig inmatning. Programmet avslutas.");	
						System.exit(0);																					
				}
        
				for (int i = 0; i < sumadd2.length(); i++)		
				{
					if (!Character.isDigit(sumadd2.charAt(i)))	
					{
						System.out.println("Du har angivit en felaktig inmatning. Programmet avslutas.");	
						System.exit(0);																							
					}
				}
        
				sumadd = Integer.parseInt(sumadd2);					
				balance = balance + sumadd;							
				makeTransaction(trans, sumadd);						
				System.out.println("");					
				System.out.println("Du har nu satt in " + sumadd + " kronor. Totalt har du " + balance + " kronor på kontot.");
				System.out.println("");
				System.out.print("Vill du gå tillbaka till huvudmenyn eller avsluta? 1 - Huvudmeny / 2 - Avsluta: ");
				choice3 = input.nextInt();						
				if (choice3 == 1)							
				{
				}
				else if (choice3 == 2)						
				{
				System.exit(0);								
				}
			}
			
			if (choice == 2)								
			{
				int sumsubtract;							
				int sumfixed;								
				int choice4;								
				String sumsubtract2;						
				Scanner input = new Scanner(System.in);		
				System.out.print("Vänligen ange ditt uttag: "); 	
				
				sumsubtract2 = input.next();				
				if (sumsubtract2 == null || sumsubtract2.length() == 0)	
				{
						System.out.println("Du har angivit en felaktig inmatning. Programmet avslutas.");	
						System.exit(0);																						
				}
        
				for (int i = 0; i < sumsubtract2.length(); i++)						
				{
					if (!Character.isDigit(sumsubtract2.charAt(i)))					
					{
						System.out.println("Du har angivit en felaktig inmatning. Programmet avslutas.");		
						System.exit(0);																							
					}
				}
        
				sumfixed = Integer.parseInt(sumsubtract2);		
				sumsubtract = sumfixed * -1;						
				balance = balance - sumfixed;					
				makeTransaction(trans, sumsubtract);				
				System.out.println("Du har nu tagit ut " + sumfixed + " kronor. Totalt har du " + balance + " kronor kvar på kontot.");	
				System.out.println("");							
				System.out.print("Gå tillbaka till huvudmenyn eller avsluta? 1 - Huvudmeny / 2 - Avsluta: ");		
				choice4 = input.nextInt();							
				if (choice4 == 1)								
				{
				}
				else if (choice4 == 2)							
				{
					System.exit(0);								
				}
			
			}
			
			if (choice == 3)				
			{
				showTransactions(trans, balance);		
			}

			if (choice == 4) 				
			{
				System.out.print("Du valde att avsluta!");		
				break;						
			}
       }
    }



public static int menu()					
{
	int choice;								
	Scanner input = new Scanner(System.in);	
	System.out.println("BANKOMAT-MENY");	
	System.out.println("------");			
	System.out.println("1. Insättning");	
	System.out.println("2. Uttag");			
	System.out.println("3. Saldobesked");	
	System.out.println("4. Avsluta");		
	System.out.println("------");			
	System.out.print("Val: ");				
	choice = input.nextInt();				
	return choice;							
}




public static void showTransactions(int[] trans, int balance)
{
	int choice2;							
	Scanner input = new Scanner(System.in);	
	System.out.println("Ditt saldo är " + balance + " kronor och dina senaste transaktioner (totalt " + trans.length + ") ser ut som följer;");
	System.out.println("");
  	for (int i = 0; i < trans.length; i++)	
	{
	  	if (trans[i] != 0)				
     	{
			System.out.println(trans[i]);		
     	}
	}
	System.out.println("");				
	System.out.print("Vill du gå tillbaka till huvudmenyn eller avsluta? 1 - Huvudmeny / 2 - Avsluta: "); 
	choice2 = input.nextInt();			
	if (choice2 == 1)				
	{
	}
	else if (choice2 == 2)			
	{
		System.exit(0);				
	}
}
   



public static void makeTransaction(int[] trans, int sumadd)		
{
	int temp;					
	temp = findNr(trans);		
	if (temp == -1)			
	{
		moveTrans(trans);		
	}
	temp = findNr(trans);		
	trans[temp] = sumadd;		
}
    


private static int findNr(int[] trans)			
{
	int slotpos = 333;							
	for (int i = 0; i < trans.length; i++)		
	{
		if (trans[i] != 0)							
		{
			slotpos = -1;								
		}
		else										
		{
			slotpos = i;								
			break;										
		}
	}
	return slotpos;								
}
    



private static void moveTrans(int[] trans)			
{
	for (int i = 0; i < trans.length; i++) 		
   {
     	if (i == (trans.length - 1))			
		{
			trans[i] = 0;						
		}
		else									
		{
			trans[i] = trans[i + 1];			
		}
	}
}

}

Koden kanske inte är den mest professionella som gjorts men den fungerar, kan gärna ta respons på saker som kunde gjorts smartare.
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in