# Primzahl Schleife



## tanye (11. Nov 2010)

Hi ,

Hab wieder ein Problem , dieses Mal denk ich nicht ganz so aufwändig zu erklären ... hoffe ich zumindest :lol:

Es geht um folgendes , ich sollte ein Programm schreiben , dass bei Eingabe einer Zahl prüft , ob es sich dabei um eine Primzahl handelt und je nach dem "ja" oder "nein" als antwort rausgeben ... aaaaber soll das ganze mithilfe einer do-schleife geschehen ... ich zeig euch mal was ich bis jetzt hab , ich kommt nicht mehr weiter ab da :


```
import javax.swing.*;
public class test {
	public static void main (String args[]){	
//ints deklarieren :	
		
int i = 2 ;
int n = 0 ;
boolean x = (((n % i) != 0) && (i < n)) ;

//string deklarieren :

String s =JOptionPane.showInputDialog("Bitte eine Zahl eingeben ! :");
//variable ist was im string eingegeben wurde :	

n=Integer.parseInt(s);
do {
	if (x==true)
	System.out.println("JA");
	
	if(x==false)
		System.out.println("NEIN");
}while(x);
	}	
}
```

Wär cool wenn einer von euch mal nen Blick drüber werfen könnte


----------



## tanye (11. Nov 2010)

Kleinder edit : Ich glaube so ist es schon etwas besser :

```
import javax.swing.*;


public class test {

	public static void main (String args[]){

		
//ints deklarieren :	
		
int i = 2 ;
int n = 0 ;
boolean x = (((n % i) != 0) && (i < n)) ;

//string deklarieren :

String s =JOptionPane.showInputDialog("Bitte eine Zahl eingeben ! :");

//variable ist was im string eingegeben wurde :	

n=Integer.parseInt(s);

do {
	if (x==true)
	System.out.println("Nein");
	
	else
		System.out.println("Ja");
}while(x==true);

	}
	
}
```
da müsste ins while irgendwie noch sowas rein wie , wenn x wahr ist oder x falsch ist ... aber dann wiederum gehts nicht auf ...


----------



## Marcinek (11. Nov 2010)

1. Weiß ich absolut nicht, was du da produziert hast.


```
boolean x = (((n % i) != 0) && (i < n)) ;
```

2. Wo ist die Prüfnug ob es eine Primzahl ist?

In der do while schleife darf / sollte die entscheidung nich drin stehen, sondern danach.:autsch:


----------



## ARadauer (11. Nov 2010)

> dabei um eine Primzahl handelt


Nur weil eine Zahl nicht gerade ist heißt das noch lange nicht, dass sie keine Primzahl ist!

Ich hoffe du studierst nicht Informatik, denn da wird noch einiges auf dich zu kommen... :autsch:




> while(x==true);


was ist wenn die zahl keine primzahl ist? wird das dann ewig laufen?


----------



## tanye (11. Nov 2010)

pscht " x = (((n % i) != 0) && (i < n)) " ist nicht von mir zur Überprüfung also ganz ruhig ^^ das ist vorgegeben ! :autsch:


----------



## Marcinek (11. Nov 2010)

So wie du es aber verwendest ist es falsch.

Weißt du warum?


----------



## tanye (11. Nov 2010)

Erst hatte ich das ganze so : 

```
import javax.swing.*;

class wasmacheich {
	
 public static void main(String[] args)
 
 
 {
	  
	 System.out.println("Ist n eine Primzahl ? :"); 
	 
	  String input=JOptionPane.showInputDialog("Zahl eingeben ?");

 int n = Integer.valueOf( input ).intValue();
 int i = 2;

 
 
 while( ((n % i) != 0) && (i < n) )
	 
 i = i+1;

 if(i==n)
 System.out.println("Ja");
 else
 System.out.println("Nein");
 
}
 }
```

Aber mit der Schleife hakt es ... also ... nein ...


----------



## ARadauer (11. Nov 2010)

tanye hat gesagt.:


> pscht " x = (((n % i) != 0) && (i < n)) " ist nicht von mir zur Überprüfung also ganz ruhig ^^ das ist vorgegeben ! :autsch:


das ist aber blödsinn! im grunde stimmt schon das man überprüft ob der rest von n / i 0 ist und dann i hochzählt und solnage i < n (wenn auch nicht gut, den wurzel aus n würde auch reichen)
Aber ich kann doch nicht die überprüfung i <n da rein geben!!!!!! Himmel!!! Wenn das vom Lehrer ist, gib mir bitte seine Kontaktdaten.Das ist die Abbruchbedinung 
Was soll den bitte x aussagen? isPrimAndLowerThanN? Das sollte doch bitte nur aussagen ob die Zahl eine Primzahl ist. 

also x = (((n % i) != 0) innerhalb der schleife machen 

 (i < n) fürs while verwenden, statt dem x==true
und die ausgabe if, ja. .. nein unterhalb der schleife... fertig


----------



## Marcinek (11. Nov 2010)

tanye hat gesagt.:


> Erst hatte ich das ganze so :
> [...]
> 
> Aber mit der Schleife hakt es ... also ... nein ...




nein an deiner Überlegung hakt es.

Sag mir in worten, wie du die Zahl 23 prüfst , ob es eine primzahl ist


----------



## ARadauer (11. Nov 2010)

> Aber mit der Schleife hakt es ... also ... nein ...


ich würd überall wo ein block anfängt do(), if(), while(), usw.. den block auch aufmachen {

und wo er zu gehen soll ihn wieder schließen }


----------



## tanye (11. Nov 2010)

wenn ich in der schleife , abgesehen von x=(((n % i) != 0)&&(i < n)) noch i=i+1; eingebe ... wobei i doch bei 2 anfängt ... funktioniert das theoretisch doch oder ? dann müsste er doch im prinzip erst prüfen ob die eingabe glatt durch 2 teilbar , dann 3 , dann 4 usw. oder ?

```
import javax.swing.*;

public class test {

	public static void main (String args[]){
	
//ints deklarieren :	
		
int i = 2 ;
int n = 0 ;
boolean x;

//string deklarieren :

String s =JOptionPane.showInputDialog("Bitte eine Zahl eingeben ! :");

//variable ist was im string eingegeben wurde :	

n=Integer.parseInt(s);

do 
{

	
x =	(((n % i) != 0)) ;

i=i+1;

	} while((i < n));

if(x=true){
	
	 System.out.println("Ja");
}
	 else{
		 
	 System.out.println("Nein");
}
}}
```

Bitte nicht ausflippen wenn ich daneben liege  :bae:


----------



## tanye (11. Nov 2010)

denn im anderen programm (ohne schleife) hat das funktioniert ???:L 

wieso hat das alles hier :

```
import javax.swing.*;

class wasmacheich {
	
 public static void main(String[] args)
 
 
 {
	  
	 System.out.println("Ist n eine Primzahl ? :"); 
	 
	  String input=JOptionPane.showInputDialog("Zahl eingeben ?");

 int n = Integer.valueOf( input ).intValue();
 int i = 2;

 
 
 while( ((n % i) != 0) && (i < n) )
	 
 i = i+1;

 if(i==n)
 System.out.println("Ja");
 else
 System.out.println("Nein");
 
}
 }
```

Super funktioniert ... und mit boolean und do nicht mehr ... ???:L


----------



## Marcinek (11. Nov 2010)

Googel den Unterschied zwischen Vergleichsoperator und Zuweisungsoperator in Java.

Und programmieren ist kein raten. 

Wenn das immernoch nicht klappt, dann gilt mein obiges Posting.


----------



## dehlen (11. Nov 2010)

z.B  if (x == 1) { 
heißt das du den Wert der Variable überprüfst ob er 1 ist also gleich 1

zb x  = 1 
heißt das du der Variable x den Wert 1 zuschreibst ein sogenannter Zuweisungsoperator... kann mal passieren wenn es ausversehen war =) wenn nicht lies es dir bitte nochmal durch


----------



## werkuh (12. Nov 2010)

du könntest das ganze auch mit der holzhammermethode machen 

teil die eingegebene zahl einfach solange durch alles, was größer als 1 und kleiner als sie selbst ist, lass mitzählen wie oft sie teilbar ist und werte dann den zähler aus..

also in dieser form (wenn es unbedingt ne do-while-schleife sein muss)


```
do {
  if(zuTestendeZahl % teiler == 0) {
    zähler++;
    }
  teiler++;
  }
while(teiler < zuTestendeZahl);
```

du musst den teiler nur auf 1 setzen, damit er bei 2 anfängt zu überprüfen und danach musst du nur noch gucken ob der zähler null ist, wenn er es ist hast du ne primzahl gefunden 

aber ist wie gesagt die holzhammermethode ... performanz ist was anderes ^^


----------



## Marcinek (12. Nov 2010)

werkuh hat gesagt.:


> du könntest das ganze auch mit der holzhammermethode machen
> 
> teil die eingegebene zahl einfach solange durch alles, was größer als 1 und kleiner als sie selbst ist, lass mitzählen wie oft sie teilbar ist und werte dann den zähler aus..
> 
> ...



Die exakte Methode, die oben zur Anwendung kommen soll. 

Und wie bereits gesgt kann man bei teiler < zuTestendeZahl ^0,5  beenden


----------

