else in if umschreiben

!cookies

Neues Mitglied
Hallo,

ich habe eine verständnisfrage zu einem Programm. Hier ist es:


Java:
import java.util.*;

class lol
{
  public static void main ( String[] args )
  {
    // Deklarieren und Initialisieren
    final int ENDSTAND = 10;
    Scanner scan = new Scanner( System.in );
    Random rand = new Random();
    int spielerscore = 0, computerscore = 0;
    int spielerwurf, computerwurf;

    // Runden spielen, bis einer der Spieler den ENDSTAND erreicht hat
    while ( spielerscore < ENDSTAND && computerscore < ENDSTAND )
    {
      // Computer wirft
      computerwurf = rand.nextInt(6)+1 + rand.nextInt(6)+1 ;
      System.out.println("Der Computer wirft: " + computerwurf);

      // Spieler wirft
      System.out.print("1 -> 11-seitiger Wuerfel  2 -> 6-seitiger Wuerfel (1 oder 2)? ");
      String wuerfeltyp = scan.nextLine();

      if ( wuerfeltyp.equals("1") )
      {
        spielerwurf = rand.nextInt(11)+2 ;
        System.out.println("Sie werfen 1 Wuerfel und haben: " + spielerwurf );
      }
      else 
      {
        spielerwurf = rand.nextInt(6)+1 + rand.nextInt(6)+1 ;
        System.out.println("Sie werfen 2 Wuerfel und haben: " + spielerwurf );
      }

      // Gewinner der Runde bestimmen und den Score anpassen
      if ( spielerwurf > computerwurf )
      {
        spielerscore = spielerscore + 1;
        System.out.println("Sie haben die Runde gewonnen!");
      }
      if (spielerwurf == computerwurf)
      {
        computerscore = computerscore + 0;
		spielerscore = spielerscore + 0;
        System.out.println("Gleichstand");
      }
	  if (spielerwurf < computerwurf)
	  {
		  computerscore = computerscore + 1;
		  System.out.println("Sie haben die Runde verloren!");
	  }
      System.out.println("Score: Computer " + computerscore + ", Sie " + spielerscore + "\n");
    }

    // Gewinner des Spiels bestimmen
    System.out.println("Endstand: Computer " + computerscore + ", Sie " + spielerscore);

    if ( computerscore > spielerscore )
      System.out.println("Der Computer hat das Spiel gewonnen!");
    else
      System.out.println("Sie haben das Spiel gewonnen!");

  }
}


ich möchte aus dem ersten else ein if machen: if ( wuerfelwurf.equals("2") ), aber der compiler gibt dann aus, dass die Variable spielerwurf noch nicht initialisiert wurde.
Wenn das else ein else bleibt, dann funktioniert alles.
 
Das liegt daran, dass, falls `wuerfeltyp` weder `1` noch `2` ist, die Variable `spielerwurf `nicht initialisiert wird, bevor du in `if ( spielerwurf > computerwurf )` darauf zugreifst.
 
Hat ein wenig gedauert, aber habs jetzt hinbekommen. Hier ist das funktionierende Programm, mit dem der Anwender nur eins oder 2 eingeben kann. Ansonsten bekommt er die Meldung "Sie duerfen nur eins oder 2 eingeben". Ich musste aus einem Stringvergleich durch "wuerfelwurf.equals("1");" einen numerischen "Vergleich" machen.

Java:
import java.util.*;

class lol
{
  public static void main ( String[] args )
  {
    // Deklarieren und Initialisieren
    final int ENDSTAND = 10;
    Scanner scan = new Scanner( System.in );
    Random rand = new Random();
    int spielerscore = 0, computerscore = 0;
    int spielerwurf, computerwurf;
	

    // Runden spielen, bis einer der Spieler den ENDSTAND erreicht hat
    while ( spielerscore < ENDSTAND && computerscore < ENDSTAND )
    {
      // Computer wirft
      computerwurf = rand.nextInt(6)+1 + rand.nextInt(6)+1 ;
      System.out.println("Der Computer wirft: " + computerwurf);

	  System.out.print("1 -> 11-seitiger Wuerfel  2 -> 6-seitiger Wuerfel (1 oder 2)? ");
      int wuerfeltyp = scan.nextInt();
	  spielerwurf = 0;
	  
	  while (wuerfeltyp != 1 && wuerfeltyp != 2)
	  {
		  System.out.println("Sie duerfen nur 1 oder 2 eingeben!");
		  wuerfeltyp = scan.nextInt();
	  }
   
  
      if ( wuerfeltyp == 1)
      {
        spielerwurf = rand.nextInt(11)+2 ;
        System.out.println("Sie werfen 1 Wuerfel und haben: " + spielerwurf );
	    
      }
      if (wuerfeltyp == 2)
      {
        spielerwurf = rand.nextInt(6)+1 + rand.nextInt(6)+1 ;
        System.out.println("Sie werfen 2 Wuerfel und haben: " + spielerwurf );
		
      }
	  
	 

      // Gewinner der Runde bestimmen und den Score anpassen
      if ( spielerwurf > computerwurf )
      {
        spielerscore = spielerscore + 1;
        System.out.println("Sie haben die Runde gewonnen!");
      }
      if (spielerwurf == computerwurf)
      {
        computerscore = computerscore + 0;
		spielerscore = spielerscore + 0;
        System.out.println("Gleichstand");
      }
	  if (spielerwurf < computerwurf)
	  {
		  computerscore = computerscore + 1;
		  System.out.println("Sie haben die Runde verloren!");
	  }
      System.out.println("Score: Computer " + computerscore + ", Sie " + spielerscore + "\n");
    }

    // Gewinner des Spiels bestimmen
    System.out.println("Endstand: Computer " + computerscore + ", Sie " + spielerscore);

    if ( computerscore > spielerscore )
      System.out.println("Der Computer hat das Spiel gewonnen!");
    else
      System.out.println("Sie haben das Spiel gewonnen!");

  }
}

Könnte ich das Programm noch besser oder effizienter schreiben?
 
Zuletzt bearbeitet:

Zurück
Oben