# Zahlen Raten



## Lybrial (31. Okt 2010)

Hiho, 

so weit bin ich bisher:


```
import java.util.Scanner;
public class Zahlen_Raten
{
	public static void main(String[] args)
	{
		Scanner input = new Scanner(System.in);
	
		int zufallsZahl = (int)(Math.random()*90000)+10000; //5-stellige Zufallszahl wird erzeugt.
		int eingabe = 0;			
		int anzahlGleich = 0;
		int summe = 0;
		
		System.out.print("Errate die Zahl: ");
		eingabe = input.nextInt();
		
		for (int j = 0; j < 5; j++)//Alle 5 stellen der Zufallszahl sollen überprüft werden.
		{
			int modulo;
			modulo = zufallsZahl%10;   //Bsp. Zufallszahl = 12345, modulo wäre in dem fall 5
				
			if (modulo == (eingabe%10))  //Modulo Wert der Zufallszahl wird mit dem Modulowert der Eingabe verglichen
			{
				anzahlGleich++;   //Wenn dieser Gleich ist, soll den Anzahl der Gleichen Zahlen erhöht werden
				summe = summe + modulo;		//Wenn dieser Gleich ist, soll die Summe um den Modulowert erhöht werden
			}
			eingabe = eingabe/10;  //Zahlen durch 10 dividieren, um mit der nächsten Stelle der Zahl fortfahren zu können
			zufallsZahl = zufallsZahl/10; //Zahlen durch 10 dividieren, um mit der nächsten Stelle der Zahl fortfahren zu können
		}
		System.out.println("Anzahl Gleiche Zahlen: " +anzahlGleich);
		System.out.println("Summe der Gleichen Zahlen: " +summe);		
	}
}
```

Jetzt müsste ich ja um das ganze noch eine Schleife packen, die den Code solange wiederholt,
bis die geratene Zahl der zufällig erzeugten entspricht. Nur leider komm ich einfach nicht drauf
wie die Schleife aussehen muss.
Hatte es schon damit versucht:


```
int i = 0;
while(eingabe != zufallsZahl)
{
	.......
	i++
}
```

der springt dann aber immer nach dem er das einmal ausgeführt hat aus der Schleife, warum?


----------



## XHelp (31. Okt 2010)

So an einem Schleifenkopf lässt sich ja nicht viel erkennen. Wie _genau_ hast du es denn versucht?


----------



## Marcinek (31. Okt 2010)

weil eingabe == zufallszahl ist zu dem Zeitpunkt.

Ich glaube hier gibt es bereits hundert threads, die das zahlenraten besprechen. Vieleicht mal sufu nutzen?


----------



## Lybrial (31. Okt 2010)

Und diese Threads brachten mir alle jarnischt 

Math.random wende ich doch weit vor der Schleife schon an, wann wird diese 
Zahl denn erstellt wenn sie beim Beginn der Schleife noch 0 sein soll?

Ich hatte mir das mit der While schleife so gedacht:


```
import java.util.Scanner;
public class Zahlen_Raten
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
    
        int zufallsZahl = (int)(Math.random()*90000)+10000;
        int eingabe = 0;            
        
        int i = 0;
	while(eingabe != zufallsZahl)
	{
	    int anzahlGleich = 0;
            int summe = 0;

	    System.out.print("Errate die Zahl: ");
            eingabe = input.nextInt();

	    for (int j = 0; j < 5; j++)
            {
                int modulo;
                modulo = zufallsZahl%10;   
                
            	if (modulo == (eingabe%10))  
            	{
                	anzahlGleich++;   
                	summe = summe + modulo;     
            	}
            	eingabe = eingabe/10;  
                zufallsZahl = zufallsZahl/10; 
            }
            System.out.println("Anzahl Gleiche Zahlen: " +anzahlGleich);
            System.out.println("Summe der Gleichen Zahlen: " +summe); 
        }      
    }
}
```

Und wenn jetzt die Zufallszahl vor der Schleife tatsächlich noch 0 ist und er deshalb
nur einmal die Schleife durchläuft, wüsste ich nicht was ich sonst benutzen sollte.....


----------



## XHelp (31. Okt 2010)

Die ist nicht VOR der Schleife 0, sondern nach der Schleifen. Wenn du 2/10 rechnest, dann ist es 0. Somit machst du es in der Schleife immer 0.
Du darfst die Ursprüngliche Zufallszahl natürlich NICHT verändern.


----------



## Lybrial (31. Okt 2010)

Dann ist der gesamte Code ja hinfällig.......

wozu speicher ich die zahl denn in die variable zufallsZahl wenn sie dann eh 
auf 0 gesetzt wird.....so ein mißt

wie sollte mans dann machen?


----------



## Marcinek (31. Okt 2010)

Eine sehr merkwürdiger Post... Müssen wir uns dür dein Code schuldig fühlen? ^^


Zum Problem: Du darfst nicht zufallszahl = zufallszahl / 10 machen... Da du am ende zufallszahl = 0 hast und gleiches prob auch mit eingegebener zahl.

Wenn man jetzt sich tatsächlich die anderen Threads durchgelesen hätte, dann könnte man sich das posten sparen und wäre fertisch.

Googeln bringt zu dem Thema, da jeder Stundent / Schüler es macht auch nur ganz wenig ergebnisse :noe:


----------



## Lybrial (31. Okt 2010)

Das mag korrekt sein aber eben nicht auf diese bestimmt weise.....
die vorgehensweise mit dem Zufallszahl/10 war eine Vorgabe vom Prof
und eine ähnliche konnte ich nirgends finden, jetzt ist mir natürlich auch
klar warum nicht.
Frage mich nur was er sich dabei gedacht hat^^


----------



## Marcinek (31. Okt 2010)

Du kannst das schon so machen um halt eine zahl abzuschneiden...

Aber du änderst damt die Eingabe des Users.. SO hat der Prof das sicher nicht vorgemacht...


----------



## Lybrial (31. Okt 2010)

```
for (int j = 0; j < 5; j++)
{
     int modulo;
     modulo = zufallsZahl%10;   
                
     if (modulo == (eingabe%10))  
     {
         anzahlGleich++;   
         summe = summe + modulo;     
      }
      eingabe = eingabe/10;  
      zufallsZahl = zufallsZahl/10; 
}
```

Nur das stammt von ihm, der Rest net.


----------



## Marcinek (1. Nov 2010)

Ok kann man machen, dann darf die Abbruchbedinung nicht while(eingabe != zufallszahl) sein, sondern while(anzahlGleiche < XXX)

You know?


----------



## Lybrial (1. Nov 2010)

So rockt das Programm, habe erstens deinen Tipp mit eingebaut und zweitens die 
zufallsZahl in ne zwischenvariable gespeichert:


```
import java.util.Scanner;
public class Zahlen_Raten_2
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
    
        int zufallsZahl = (int)(Math.random()*90000)+10000;
        int eingabe = 0;  
		int temp = zufallsZahl;
        int anzahlGleich = 0;
		
		while(anzahlGleich < 5)
		{
            int summe = 0;
			anzahlGleich = 0;
			
			System.out.print("Errate die Zahl: ");
            eingabe = input.nextInt();
 
			for (int j = 0; j < 5; j++)
            {
                int modulo;
                modulo = zufallsZahl%10;   
                
                if (modulo == (eingabe%10))  
                {
                    anzahlGleich++;   
                    summe = summe + modulo;     
                }
                eingabe = eingabe/10;  
                zufallsZahl = zufallsZahl/10; 
            }
			zufallsZahl = temp;
            System.out.println("Anzahl Gleiche Zahlen: " +anzahlGleich);
            System.out.println("Summe der Gleichen Zahlen: " +summe); 
        }      
    }
}
```


----------

