Eingabe Überprüfung von Klassen-Objekten

Was nicht funktioniert ist:

java DrehFB

Fehler: OutOfBoundsException
Natürlich funktioniert das nicht. Wenn du keine Argumente übergibst, dann ist das Array leer. Wenn du dann auf einen nicht-existenten Eintrag wie z.B. argv[1] zugreifst, bekommst du selbstverständlich eine Ausnahme... :eek: Du mußt erstmal prüfen ob auch genug Argumente übergeben wurden.

Zeig mal deinen jetzigen Code der main Methode.

Gruß
 
Code:
public static void main (String[] argv)
	{	
		MANNSCHAFTEN_MAX = Integer.parseInt(argv[1]);
		
		boolean ende = false;
		turnierNummer = argv[0];
		System.out.println("\n<<< " + argv[0] + ". internationales Dreh-Fußball-Turnier >>>");
		System.out.println("================================================");
			
		do
		{
			// Menue-Ausgabe:
			System.out.println("\nHauptmenue:");
			System.out.println("===========");
			System.out.println("\n1) Neue Mannschaften eingeben");
			// System.out.println("2) Mannschaften löschen");
			System.out.println("3) Tabelle anzeigen");
			System.out.println("4) Auslosung");
			System.out.println("5) Lucky-Looser-Auslosung");
			System.out.println("6) Play-Off-Auslosung (KO-System)");
			System.out.println("7) Spiel-Ergebnisse eingeben");
			System.out.println("8) Tabelle ausdrucken");
			System.out.println("\n0) Programm beenden");
			
			try
			{
				// Benutzereingaben lesen:
				System.out.print("\nAuswahl:  ");
				Scanner eingabe = new Scanner(System.in);
				int auswahl = eingabe.nextInt();
					
				// Benutzereingaben verarbeiten:
				switch (auswahl)
				{
					case 1:
						/* if (anzMannschaften == MANNSCHAFTEN_MAX)
						{ 	
							System.out.println("\nDie Mannschaften wurden schon eingeben \n"); 
							break; 
						} */
						
						System.out.println("\nNeue Mannschaften eingeben:");
						System.out.println("===========================");
						
						while (anzMannschaften < MANNSCHAFTEN_MAX && anzMannschaften >= 0)
						{ anzMannschaften = neueMannschaft(anzMannschaften); }
						break;					
					
					/*
					case 2:
						anzMannschaften = loeschen(anzMannschaften, mannschaftsWahl(anzMannschaften));
						break;
					*/
										
					case 3:
						tabelleAnzeigen(anzMannschaften);
						break; 									
						
					case 4:
						System.out.println("\nAuslosung der Mannschaften:");
						System.out.println("===========================");
						
						if (auslosungsVA == 0) 
						{ auslosung(anzMannschaften); }
						else
						{ System.out.println("Es wurde schon ausgelost "); }
						break;
						
					case 5:
						System.out.println("\nLucky-Looser-Auslosung:");
						System.out.println("=======================");
						
						if (auslosungsLL1 == 1 && auslosungsLL2 == 1) 
						{ auslosungLL(anzMannschaften); }
						else
						{ System.out.println("Es wurde noch nicht ausgelost oder Lucky-Looser wurden schon ausgelost "); }
						break;
					
					case 6:
						System.out.println("\nPlay-Off-Auslosung (KO-System):");
						System.out.println("===============================");
						
						// if (auslosungsLL2 == 1)
						// { playOff(); }
						// else
						// { System.out.println("\nSoweit sind wir noch nicht \n"); }
						break;
						
					case 7:
						if (nMa == 1)
						{ spielergenisseEingeben(anzMannschaften); }
						else
						{ System.out.println("\nEs wurden noch keine Mannschaften eingegeben \n");  }
						break;
						
					case 8:
						if (nMa == 1)
						{ Drucken.printTabelle2(anzMannschaften); }
						else
						{ System.out.println("\nEs wurden noch keine Mannschaften eingegeben "); }
						break;	
						
					case 0:
						System.out.println();
						System.out.println("Wirklich Beenden ?\t999\tfür Beenden eingeben ");
						System.out.println();
						Scanner beenden = new Scanner(System.in);
						int be = beenden.nextInt();
						
						if (be == 999)
						{
							System.out.println("\nProgramm beendet......\n");
							ende = true;
							break;
						}
						break;
						
					default: 
						System.out.println("\nMenue-Punkt nicht vorhanden ");
						break;
				}
		
			} catch (Exception e) // bei falscher Eingabe
			{ System.out.println(); System.out.println("Nur Zahlen eingeben "); } 
			  
		} while (!ende);		
	}

	
	// Methode eingeben():
	public boolean eingeben()
    {
		try
		{
			Console console = System.console();
			if (console == null) 
			{
				System.err.println("Mannschaftsnamen eingeben ");
				return false;
			}
		    			
				mannschaft = console.readLine("Neue Mannschaft eingeben: ");
				// index = anzMannschaften;
						
			return true;
			
         } catch (Exception e)
         { return false; }       
    }
	
	// Methode neueMannschaft():
	static int neueMannschaft(int mNr)
	{	
		nMa = 1;
		auslosungsVA = 0;
		mannschaften[mNr] = new DrehFB();
		
		while (!mannschaften[mNr].eingeben())     
		// ist das Gleiche wie: while (mannschaften[mNr].eingeben() == false)
		{
			System.out.println("Fehlerhafte Eingabe ");
		}
		
		return (mNr + 1);
	}
	
	// Methode tabelleAnzeigen():
	static void tabelleAnzeigen(int mNr)
	{	
		Arrays.sort(mannschaften, new Comparator<DrehFB>() 
		{			
			public int compare(DrehFB o1, DrehFB o2) 
		 	{		 		 
				if(o1.torDiff > o2.torDiff) 
		 		{ return -1; }
			         
		 		else if(o1.torDiff < o2.torDiff) 
		 		{ return 1; }	 
				
		 		else
		 		{ return 0; }	
			}		 	
		} );
		
		Arrays.sort(mannschaften, new Comparator<DrehFB>() 
		{			
			public int compare(DrehFB o1, DrehFB o2) 
			{		 		 
				if(o1.spiele < o2.spiele) 
				{ return -1; }
						         
				else if(o1.spiele > o2.spiele) 
				{ return 1; }	 
							
				else
				{ return 0; }	
			}		 	
		} );
		
		Arrays.sort(mannschaften, new Comparator<DrehFB>()
		{
			public int compare(DrehFB o1, DrehFB o2) 
		 	{
				if(o1.punkte > o2.punkte) 
		 		{ return -1; }
					         
		 		else if(o1.punkte < o2.punkte) 
		 		{ return 1; }	 
						
		 		else
		 		{ return 0; }	
			}		 	
		} );
			
		System.out.println("\nMannschafts-Tabelle:");
		System.out.println("====================\n");
		System.out.println("\tMS\t\tSP\tFSP\tGT\tBT\tTD\tPT\n");
		
		int z = 0;
		
		for (int i = 0; i < mNr; i++)
		{
			if (mannschaften[i].aus == 1 && z == 0)
			{ System.out.println("------------------------------------------------------------------"); z++; }
			
			System.out.print((i+1) + ")\t");
			System.out.println(mannschaften[i].tabelle());			
		}		
	}
	
	// Methode tabelle():
	public String tabelle()
    {
		String text; 
		
		if (mannschaft.length() > 7)
		{ text = mannschaft + "\t" + spiele + "\t" + freispiele + "\t" + gTore + "\t" + bTore + "\t" + torDiff + "\t" + punkte; }
		else
		{ text = mannschaft + "\t\t" + spiele + "\t" + freispiele + "\t" + gTore + "\t" + bTore + "\t" + torDiff + "\t" + punkte; }
        
		return text;
    }
	
	// Methode mannschaftsWahl() (fuer Methode loeschen):
	static int mannschaftsWahl(int mNr)
	{
		boolean ende = false;
		short auswahl = 0;
		
		do
		{
			tabelleAnzeigen(mNr);
			
			try
			{
				System.out.println("\n Auswahl:");
				Scanner eingabe = new Scanner(System.in);
				auswahl = eingabe.nextShort();
				
				if (auswahl > 0 && auswahl <= mNr)
				ende = true;
				
				// else if (auswahl == 999)
				// { ende = true; break; }
				
				else
				System.out.println("Ungueltige Auswahl ");
				
			} catch (Exception e)
			{ System.out.println("Zahl eingeben "); }
		} while (!ende);
		
		return (auswahl - 1);
	}
	
	// Methode loeschen():
	static int loeschen(int mss, int index)
	{	
		for (int i = index; i < (mss - 1); i++)
		{ mannschaften[i] = mannschaften[i + 1]; }
		
		mannschaften[mss - 1] = null;		
				
		return (mss - 1);		
	}
	
	// Methode auslosung(Auslosung der Mannschaften mit Zufallszahlen):
	static void auslosung(int mNr)
	{
		auslosungsVA = 1;
		auslosungsLL1 = 1;
		
		// Zufallszahlen generieren:
		int zfz; 
		int[] zufallszahl = new int[mNr]; 
        Random random = new Random(); 
        
        for (int i = 0; i < mNr; i++) 
        { 
            zfz = random.nextInt(mNr);             // oder: zfz = random.nextInt(mNr + 1);
            zufallszahl[i] = zfz; 
            
            // Doppelte ausschließen:
            for (int j = 0; j < i; j++)
            {
            	if (zufallszahl[j] == zfz)         // || zufallszahl[j] == 0)
            	{ 
            		i--; 
            		break; 
            	} 
            }            
        }
        
        // Gerade Auslosung:
        if ((mNr % 2) == 0)
        {
        	for (int i = 0; i < mNr; i++)
            {        		
               	System.out.print(mannschaften[zufallszahl[i]].mannschaft);
                System.out.print("\t\tgegen\t");
                System.out.print(mannschaften[zufallszahl[i + 1]].mannschaft);
                System.out.println();
                i++;          
            }       
        }
        
        // Ungerade Auslosung:
        else 
        {
        	int schlussZahl = 0;
        	
        	for(int i = 0; i < (mNr - 1); i++)
        	{
        		System.out.print(mannschaften[zufallszahl[i]].mannschaft);
            	System.out.print("\t\tgegen\t");
            	System.out.print(mannschaften[zufallszahl[i + 1]].mannschaft);
            	System.out.println();
            	schlussZahl = zufallszahl[i + 2];
            	i++;      		       		
        	}       
        	
        	System.out.println();  
        	System.out.print(mannschaften[schlussZahl].mannschaft + "\thaben ein Freispiel ");
        	System.out.println();
        	
        	mannschaften[schlussZahl].spiele = mannschaften[schlussZahl].spiele + 1;
        	mannschaften[schlussZahl].freispiele = mannschaften[schlussZahl].freispiele + 1;
        	mannschaften[schlussZahl].punkte = mannschaften[schlussZahl].punkte + 3;
        	        	
        	// mannschaften[schlussZahl].torDiff = (mannschaften[schlussZahl].gTore - mannschaften[schlussZahl].bTore);
        }        
    }
	
	// Methode auslosungLL(Auslosung der Lucky-Looser mit Zufallszahlen):
	static void auslosungLL(int mNr)
	{
		auslosungsLL1 = 0;
		auslosungsLL2 = 0;
		
		// Gerade Auslosung:
		String[] temporary = new String[mNr / 2];
		int k = 0;
			
        for(int i = 0; i < mNr; i++)
        { 
        	if(mannschaften[i].punkte == 0)
        	{ temporary[k] = mannschaften[i].mannschaft; k++; }
        }
        	
       	int zfz; 
       	int[] zufallszahl = new int[mNr]; 
        Random random = new Random(); 
        
        for (int i = 0; i < temporary.length; i++) 
        { 
        	zfz = random.nextInt(temporary.length);             // oder: zfz = random.nextInt(mNr + 1);
        	zufallszahl[i] = zfz; 
            
        	// Doppelte ausschließen:
        	for (int j = 0; j < i; j++)
        	{
        		if (zufallszahl[j] == zfz)         // || zufallszahl[j] == 0)
        		{ 
        			i--; 
        			break; 
        		} 
        	}            
        }
        	
        if ((temporary.length % 2) == 0) 
        {
        	for (int i = 0; i < temporary.length; i++)
        	{        		
        		System.out.print(temporary[zufallszahl[i]]);
        		
        		if (i % 2 == 0)
        		{ System.out.print("\t\tgegen\t"); }   
        
        		if (i % 2 != 0)
        		{ System.out.println(); } 
        	} 
        }            
        
        // ungerade Auslosung:
        else 
        {
        	int i;
        	
        	for (i = 0; i < temporary.length; i++)
        	{   
        		if (i != (temporary.length - 1))
        		{ System.out.print(temporary[zufallszahl[i]]); }
        		
        		if (i % 2 == 0 && i != (temporary.length - 1))
        		{ System.out.print("\t\tgegen\t"); }   
        
        		if (i % 2 != 0)
        		{ System.out.println(); } 
        	}
        	
        	System.out.println();
        	System.out.print(temporary[zufallszahl[i - 1]] + "\thaben ein Freispiel ");
        	System.out.println();
        	
        	for (int p = 0; p < mNr; p++)
        	{
        		if(mannschaften[p].mannschaft == temporary[zufallszahl[i - 1]])
        		{
        			mannschaften[p].spiele = mannschaften[p].spiele + 1;
                	mannschaften[p].freispiele = mannschaften[p].freispiele + 1;
                	mannschaften[p].punkte = mannschaften[p].punkte + 3;
                	        	
                	// mannschaften[schlussZahl].torDiff = (mannschaften[schlussZahl].gTore - mannschaften[schlussZahl].bTore);
        		}
            	        	
        	}       	
        } 
        
        auslosungsLL2 = 1;
    }
	
	 // Methode spielergenisseEingeben():
	static void spielergenisseEingeben(int mNr)
	{
		try
		{
			System.out.println();
			System.out.print("1. Mannschaft eingeben: ");
			Scanner eingabe1 = new Scanner(System.in);
			String ausw1 = eingabe1.next();
						
			System.out.print("2. Mannschaft eingeben: ");
			Scanner eingabe2 = new Scanner(System.in);
			String ausw2 = eingabe2.next();
			
			boolean check_ausw1 = false;
			boolean check_ausw2 = false;
			
			for (int y = 0; y < mNr; y++)
			{	
				if (ausw1.compareTo(mannschaften[y].mannschaft) == 0)
				{ check_ausw1 = true; break; }
			}
			
			for (int y = 0; y < mNr; y++)
			{	
				if (ausw2.compareTo(mannschaften[y].mannschaft) == 0)
				{ check_ausw2 = true; break; }
			}
			
			if (check_ausw1 == false || check_ausw2 == false)
			{	
				System.out.println();
				System.out.println("Mannschaft1 oder Mannschaft2 nicht vorhanden ");				
			}
			
			else
			{
				Scanner eingabe11 = new Scanner(System.in);
				Scanner eingabe12 = new Scanner(System.in);
				
				if (ausw1.length() > 7)
				{ System.out.print(ausw1 + "\tTore: "); }
				else
				{ System.out.print(ausw1 + "\t\tTore: "); }
				int ausw11 = eingabe11.nextInt();
				
				if (ausw2.length() > 7)
				{ System.out.print(ausw2 + "\tTore: "); }
				else
				{ System.out.print(ausw2 + "\t\tTore: "); }
				int ausw12 = eingabe12.nextInt();
			
				int i, j;
				
				for (i = 0; i < mNr; i++)
				{
					if (ausw1.compareTo(mannschaften[i].mannschaft) == 0)
					{
						mannschaften[i].gTore = (mannschaften[i].gTore + ausw11);
						mannschaften[i].bTore = (mannschaften[i].bTore + ausw12);
						mannschaften[i].torDiff = (mannschaften[i].gTore - mannschaften[i].bTore);
						mannschaften[i].spiele = (mannschaften[i].spiele + 1);
						break;
					}				
				}			
			
				for (j = 0; j < mNr; j++)
				{
					if (ausw2.compareTo(mannschaften[j].mannschaft) == 0)
					{
						mannschaften[j].gTore = (mannschaften[j].gTore + ausw12);
						mannschaften[j].bTore = (mannschaften[j].bTore + ausw11);
						mannschaften[j].torDiff = (mannschaften[j].gTore - mannschaften[j].bTore);					
						mannschaften[j].spiele = (mannschaften[j].spiele + 1);					
						break;
					}			
				}			
			
				if (ausw11 > ausw12)
				{
					mannschaften[i].punkte = (mannschaften[i].punkte + 3);
				}
			
				else if (ausw12 > ausw11)
				{
					mannschaften[j].punkte = (mannschaften[j].punkte + 3);
				}
			
				else
				{
					mannschaften[i].punkte = (mannschaften[i].punkte + 1);
					mannschaften[j].punkte = (mannschaften[j].punkte + 1);
				}
			
				if (mannschaften[i].spiele == 2 && mannschaften[i].punkte == 0)
				{ mannschaften[i].aus = 1; }
			
				if (mannschaften[j].spiele == 2 && mannschaften[j].punkte == 0)
				{ mannschaften[j].aus = 1; }		
			}
			
		} catch (Exception e)
		{ e.printStackTrace(); };
		
		auslosungsLL2 = 1;		
	}
 
Genau hier habe ich gedacht, dass man das im Java-Programm
mit einem Standart-Wert abfangen kann.
Ja, warum machst du es dann nicht?
Java:
switch (argv.length) {
  case 2:
    MANNSCHAFTEN_MAX = Integer.parseInt(argv[1]);
  case 1:
    turnierNummer = argv[0];
  case 0:
    break;
  
  default:
    System.err.println("wrong number of arguments");
    System.exit(1);
}
Den zweiten Fehler kann ich nicht nachvollziehen.

Gruß
 
Code:
switch (argv.length)

... auf diese Idee bin ich natürlich noch nicht gekommen...



... und den 2. Fehler kann auch ich nicht nachvollziehen


LG und besten Dank
Dzyan
 
Zurück