Exception bei Zufallszahl

  • Themenstarter Themenstarter Mekkapeter
  • Beginndatum Beginndatum
M

Mekkapeter

Gast
Hallo, ich hab da ein Problem mit meinem Code,ich hab eine Zufallszahl n generiert die einen Exception Error verursacht. Ich hab jetzt 4 mal über den Programmcode drüber gesehen und hab keinen Fehler gefunden. Bin Student im 1.Semester Wirtschaftsinformatik und wir programmieren mit dem java Editor Eclipse.

Hier ist die Aufgaben Stellung. Wir sollen ein Programm schreibne wo ein spieler gegen den Computer spielt. In dem spiel geht es um Streichhölzer die von einem Haufen entfernt werden sollen. Die Zufallszahl b ist dafür zuständig ob der computer beginnt oder der spieler und die zufallszahl s ist für den Spielmodus des Computer zuständig,der in 2 Spielmodi spielen kann.

Die Zufallszahl n ist für die anzahl der Streichhölzer verantwortlich. Wer von den beiden das letzte Streichholz,also n=1,zieht hat verloren.

Mein fehler hat mit dieser Zufallszahl zu tun,laut Eclipse.Ich bedanke mich bei Euch schon mal. 🙂
Hier kommt der Programmcode.

Java:
import java.util.Scanner;
public class Bisektions_Verfahren {
	public static void main (String [] args){
		Scanner sc=new Scanner(System.in);
		double a,b,nmax,m,a1,b1,eps;
		int i=0;
	
		//Eingabe Variable 
		System.out.println("Eingabe der Variablen a und b: ");
		a=sc.nextDouble();
		b=sc.nextDouble();
		System.out.println("Eingabe der Anzahl der Iterationen: ");
		nmax=sc.nextInt();
		eps=1*Math.pow(10,-8);
		//Formeln 
		
		while (!(i>=nmax)|| !((b-a)>eps)){
		a1=Math.sqrt(a)-Math.cos(a);
		b1=Math.sqrt(b)-Math.cos(b);
		if ((a1<0 && b1>0) || a1>0 && b1<0 ) {
			m=(a+b)/2;
			
			if ((Math.signum(a)==Math.signum(m))){
					a=m;
				}
				else {
					b=m;
			}
		
						
			a1=a;
			b1=b;
			i=i+1;
			System.out.println("Bei der "+i+"-ten Iteration haben a=" +a+" und b="+b+ " Lösung m="+m );
		}
		}
		System.out.println("Wobei bei der letzten Iteration das Vorzeichn der Funktion gleich ist");
			}
	}
 
Zuletzt bearbeitet von einem Moderator:
Java:
import java.util.Random;
import javax.swing.JOptionPane;

public class Game_of_Nim {
	public static void main(String[] args) {
		Random r = new Random();
		// Variable
		int n=0, s, b, nweg = 0;
		// Zufallszahlen
		n = r.nextInt(100)+1;
		s = r.nextInt(0) + 1;
		b = r.nextInt(0) + 1;
		// Ausgabe n
		JOptionPane.showMessageDialog(null, "Die Haufengröße beträgt: " + n);
		
		// Ausgabe des Modi
		if (s == 1) {
			JOptionPane.showMessageDialog(null,
					"Der Computer spielt im smart-mode.");
		} 
		else if (s == 0) {
			JOptionPane.showMessageDialog(null,
					"Der Computer spielt im stupid-mode.");
			}
		
		// Beginn
		if (b == 0) {
			JOptionPane.showMessageDialog(null, "Sie beginnen.");
			String m = JOptionPane.showInputDialog(null,"Anzahl die sie vom haufen weg nehmen möchten: ");
			nweg = Integer.parseInt(m);
			n -= nweg;
			JOptionPane.showMessageDialog(null, "Ausgabe der Haufengröße: " + n);
		} 
		else {
			JOptionPane.showMessageDialog(null, "Der Computer beginnt!");
			}
		
		// Spielt mit Fußgesteuerter while schleife
		do {
			// haufen=1 computer verliert
			if (n == 1) {
				JOptionPane.showMessageDialog(null, "Computer hat verloren!");
				break;
			}
			
			// spiel-modi computer stupid
			if (s == 0) {
				nweg = r.nextInt((n / 2)) + 1;
			} 
			
			//spiel modi computer smart
			else if (s == 1) {
				int q;
				q = (int) ((int) Math.log(n) / Math.log(2));
				nweg = n - ((int) Math.pow(2, q) - 1);
				
				if (nweg > (n / 2)) {
					nweg = r.nextInt();
				}
			}
			
			//Minderung Haufengröße 
			n -= nweg;
			
			//ausgabe der weggenommenen haufengröße Spieler
			System.out.println("Ausgabe von der Anzahl die Weg genommen wird."+ nweg);
			System.out.println("Ausgabe von der Haufengröße: " + n);
			
			// spieler verliert
			if (n == 1) {
				JOptionPane.showMessageDialog(null, "Sie haben verloren.");
				break;
			}
			
			//Spieler wählt weg zunehmende anzahl
			String m = JOptionPane.showInputDialog(null,"Anzahl die sie vom haufen weg nehmen möchten: ");
			nweg = Integer.parseInt(m);
			n -= nweg;
			JOptionPane.showMessageDialog(null, "Ausgabe der Haufengröße: " + n);
			
		} while (n > 0);
		//Ende der do-while Schleife 
	}

}

Danke Schön!
 
r.nextInt(0)

Exception in thread "main" java.lang.IllegalArgumentException: n must be positive

...

nextInt(int) erzeugt eine Zufallszahl von 0 (mit) bis int (ohne)..also ...von und mit null bis und ohne null ;-)
 
ich mag dieses nextInt(); nicht hat das vorteile im gegensatz zu Math.random abgesehen davon das es gleich int ist??

ich würde das ganze so machen
double zufallszahl = (Math.random()*10+1); je nach dem wieviel zahlen du brauchst
und dann auf int casten!
 
Danke Schön!Das Programm funktioniert! 🙂
Da kann ich leider nicht mit reden. 🙂 🙂
Aber ich danke euch!Vorallem für die erklärung.
 
Nein, das ist schon richtig. Für wirkliche Zufallszahlen ist Random auch nicht geeignet sondern die Unterklasse java.security.SecureRandom
 
>"Echte" Zufallszahlen sind mit einer reinen Softwarelösung nur schwer herzustellen.

Knuth hat nicht umsonst in im 2ten Band von "The Art of Computer Programming" ein ganzes Kapitel diesem Thema gewidmet ;-)
 

Zurück
Oben