Zum Forum springen
Benachrichtigungen
Alles löschen

[Geschlossen] java switch anweisung?!?

19 Beiträge
5 Benutzer
0 Reactions
2,514 Ansichten
Spitzbuben
Beigetreten: 10.04.2007

Ich möchte ein programm schreiben, das ganzzahlig dividiert, den den wert der division ausgibt und den rest in vier kategorien unterteilt:
-=0
-einstellige primzahl
-rest ungerade
- keine der bedingungen trift zu

für 0 und prinzahl hab ichs hinbekommen jedoch weiß ich nicht wie ich den ungeraden rest einbauen soll... dachte mir: rest % 2 = x
falls x != 0 ist der rest ungerade .. aber wohin damit??

import javax.swing.JOptionPane;
class Fa1 {

public static void main(String[] args) {

int a, b, x, y, z;
String rest;
a = Integer.parseInt(JOptionPane.showInputDialog("a = "));
b = Integer.parseInt(JOptionPane.showInputDialog("b = "));

x = 1;
y = 1;
z = 1;
rest = "Keine der Bedingungen trifft zu!!";
if (a < 0 || b <= 0 ) {
JOptionPane.showMessageDialog (null, "Bedingungen für a oder b stimmen nicht!!",
"Resultat", JOptionPane.PLAIN_MESSAGE);
System.exit(0);

}

else {
x = x * a / b;
y = y * a % b;
z = z * y % 2;

switch ( y ) {

case 0 : rest = "null" ; break;
case 2 : rest = "primzahl"; break;
case 3 : rest = "primzahl"; break;
case 5 : rest = "primzahl"; break;
case 7 : rest = "primzahl"; }

JOptionPane.showMessageDialog (null, "a / b = " +x+"\nRest: "+rest+"",
"Resultat", JOptionPane.PLAIN_MESSAGE);
System.exit(0); }

}
}


18 Antworten
BigBiber
Beigetreten: 17.09.2006

Ich guck mir das mal an


rook
Beigetreten: 07.05.2006

Was ist, wenn der Rest eine Prim- und ungerade Zahl ist? Wie lautet dann die Ausgabe?


BigBiber
Beigetreten: 17.09.2006

update:

import javax.swing.JOptionPane;

public class Fa2 {
	
	public static String testeZahl(int a, int b){
		
		if(a < 0 || b <= 0){
			JOptionPane.showMessageDialog (null, "Bedingungen für a oder b stimmen nicht!!", "Resultat", JOptionPane.PLAIN_MESSAGE);
			System.exit(0);
		}
		
		int x = a / b;
		int y = a % b;
		int z = y / 2;
		String rest;
		
		if( z == 0){
			
			switch (y){
		
			case 0: rest = "Null"; break;
			case 1: rest = "Primzahl"; break;
			case 3: rest = "Primzahl"; break;
			case 5: rest = "Primzahl"; break;
			case 7: rest = "Primzahl"; break;
			default: rest = "Nichts von alledem"; 
			
			}
		}else{
			rest = "Gerader Rest";
		}
		
		return "a / b = " + x + "\nRest: " + rest;
	}
	
	public static void main(String[] args){
		
		String ergebnis = "";
		try{
		int a = Integer.parseInt(JOptionPane.showInputDialog("a = "));
		int b = Integer.parseInt(JOptionPane.showInputDialog("b = "));
		ergebnis = testeZahl(a,b);
		}catch(NumberFormatException e){
			JOptionPane.showMessageDialog (null, "Bedingungen für a oder b stimmen nicht!!", "Resultat", JOptionPane.PLAIN_MESSAGE);
			System.exit(0);
		}
		
		JOptionPane.showMessageDialog (null, ergebnis ,"Resultat", JOptionPane.PLAIN_MESSAGE);

rook
Beigetreten: 07.05.2006

ungetestet:

import javax.swing.JOptionPane;
class Fa1 {

	public static void main(String[] args) {

		int a, b, x, y, z;
		String rest;
		a = Integer.parseInt(JOptionPane.showInputDialog("a = "));
		b = Integer.parseInt(JOptionPane.showInputDialog("b = "));

		x = 1;
		y = 1;
		z = 1;
		rest = "Keine der Bedingungen trifft zu!!";

		if (a < 0 || b <= 0 ) {
			JOptionPane.showMessageDialog (null, "Bedingungen für a oder b stimmen nicht!!",
			"Resultat", JOptionPane.PLAIN_MESSAGE);
			System.exit(0);

		} else {
			x = x * a / b;
			y = y * a % b;
			z = z * y % 2;
			
			//0
			if (y==0) {
				rest = "null";
			//primzahl und einstellig
			} else if (isPrime(y) && y <10) {
				rest = "primzahl";
			//ungerade (kann auch mehrstellige primzahl sein
			} else if (y % 2 = 1) {
				rest = "ungerade";
			//gerade
			} else {
				rest = "gerade";
			}

			JOptionPane.showMessageDialog (null, "a / b = " +x+"\nRest: "+rest+"",
			"Resultat", JOptionPane.PLAIN_MESSAGE);
			System.exit(0);
		}


	}

	public static boolean isPrime(int n) {
		boolean prime = true;
		for (int i = 3; i <= Math.sqrt(n); i += 2)
			if (n % i == 0) {
				prime = false;
				break;
			}
		if (( n%2 !=0 && prime && n > 2) || n == 2) {
			return true;
		} else {
			return false;
		}
	}
} 

rook
Beigetreten: 07.05.2006
} else if (isPrime(y) && y < 10) {

sollte man noch auf

} else if (y < 10 && isPrime(y)) {

ändern, macht nur bei großen Zahlen einen Unterschied.


Spitzbuben
Beigetreten: 10.04.2007

... ok ich versuchs mal so thx!!


Mukusleaf
Beigetreten: 16.07.2006

Studierst an der TU München?


Spitzbuben
Beigetreten: 10.04.2007

ich studier in trier


Spitzbuben
Beigetreten: 10.04.2007

bin jetzt mal so weit gekommen... er gibt mir für b = 0 nichts raus.. also ergebnisfenster öffnet nicht... für rest 0 gibt er mir raus rest:"gerade" genau wie für rest2: rest:"gerade"..?? müsste doch eig nach der switch anweisung raus gehn aus der schleife???

import javax.swing.JOptionPane;
class Fa1 {

public static void main(String[] args) {

int a, b, x, y, z;
String rest;
a = Integer.parseInt(JOptionPane.showInputDialog("a = "));
b = Integer.parseInt(JOptionPane.showInputDialog("b = "));

x = 1;
y = 1;
z = 1;
x = x * a / b;
y = y * a % b;
z = z * y % 2;
rest = "Keine der Bedingungen trifft zu!!";
if (a < 0 || b <= 0) {
JOptionPane.showMessageDialog (null, "Bedingungen für a oder b stimmen nicht!!",
"Resultat", JOptionPane.PLAIN_MESSAGE);
System.exit(0);

}

else
if (z != 0) {

switch ( y ) {

case 0 : rest = "null" ; break;
case 2 : rest = "primzahl"; break;
case 3 : rest = "primzahl"; break;
case 5 : rest = "primzahl"; break;
case 7 : rest = "primzahl"; break;
default: rest = "ungerade"; break;}

JOptionPane.showMessageDialog (null, "a / b = " +x+ "\nR = "+y+"\nRest: "+rest+"",
"Resultat", JOptionPane.PLAIN_MESSAGE);
System.exit(0); }

else { JOptionPane.showMessageDialog (null, "a / b = " +x+ "\nR = " +y+ "\nRest ist gerade!",
"Resultat", JOptionPane.PLAIN_MESSAGE);
System.exit(0); }

}
}


BigBiber
Beigetreten: 17.09.2006

case 2 wird doch nie erreicht weil du vorher mit z != 0 alle geraden Werte abfängst.


Spitzbuben
Beigetreten: 10.04.2007

ich fange doch nur die geraden werte für z ab nicht für y...


BigBiber
Beigetreten: 17.09.2006

naja ist z aber nicht y % 2? da kann nur 0 oder 1 rauskommen d.h wenn y ungerade ist auch z ungerade.


Spitzbuben
Beigetreten: 10.04.2007

mh ja stimmt ist deswegen... so jetzt geht alles außer für b = 0 ... das ergebnisfenster öffnet sich garnicht erst... komischerweise kommt für b <0 und a < 0 die richtige ausgabe??...


BigBiber
Beigetreten: 17.09.2006

Versuch mal b < 1 aber normal kanns daran nicht liegen.


Spitzbuben
Beigetreten: 10.04.2007

geht leider auch nicht...


BigBiber
Beigetreten: 17.09.2006

if (a < 0 || b <= 0) {
JOptionPane.showMessageDialog (null, "Bedingungen für a oder b stimmen nicht!!",
"Resultat", JOptionPane.PLAIN_MESSAGE);

Du meinst doch diese Stelle oder nicht falls b <= 0 ist?

Wenn du das so hast wüsste ich nicht warum das nicht klappen sollte ?(


Spitzbuben
Beigetreten: 10.04.2007

ja genau so... das seltsame ist, das wenn ich ein negatives b einsetze die richtige meldung kommt....


hxhorst
Beigetreten: 31.10.2006

Original von Spitzbuben
mh ja stimmt ist deswegen... so jetzt geht alles außer für b = 0 ... das ergebnisfenster öffnet sich garnicht erst... komischerweise kommt für b <0 und a < 0 die richtige ausgabe??...

Hallo,

wenn du a / b rechnest und b = 0 ist, dann bekommst du eine Exception, weil Division durch 0 nicht erlaubt ist. Das ist auch der Grund, warum kein Ergebnisfenster kommt. Das Programm wird aufgrund der nicht abgefangenen Exception vorzeitig beendet.

In deinem Post vom 14.11.2009 20:39 steht das "if (a < 0 || b <= 0) {..}" nach der Division durch 0. Zieh diese If-Anweisung vor die Division und der Fehler sollte nichtmehr auftreten.

Horst