Hallo Community, ich habe mich heute mal drangemacht, ein Programm zur Berechnung und von Primzahlen zur Übung zu erweitern, und zwar um eine kleine Dokumentation und Funktionen, mit denen man den Bereich, in dem Primzahlen berechnet werden, bestimmt. Die Dokumentation ist noch nicht abrufbar, und ein paar (nebensächlichere) Methoden wurden noch nicht geschrieben, aber sonst sollte das Programm stehen. ABER:
1. Wenn ich mithilfe der Befehle einen Bereich auswähle (bspw. 0 - 700) (also mit dem Befehl primes 700), zieht die Bremse nicht und scheinbar wird die Methode, die bis zum Sanktnimmerleinstag Primzahlen berechnet, ausgeführt. Merkwürdigerweise funktionieren sowohl primes 699 und primes 749, aber es scheint ein paar Bereiche zu geben, die mein Programm nicht mag. Ich habe bisher den Bereich um 300 aufwärts, 430 und 700 aufwärts gefunden. Was geht da falsch?
2. Wenn ich beispielsweise primes 100 eingebe, ist soweit alles richtig, aber 101 wird ebenfalls zu den Primzahlen von 0 - 100 (der sollte es jedenfalls sein) gezählt und als Ergebnis ausgegeben. Bei primes 200 wird 211 noch dazugezählt, und bei Primes 402 noch die 409. Es wird scheinbar immer noch die nächste Primzahl mit angegeben, die außerhalb des Bereichs liegt.
Hier wären die wahrscheinlich interessantesten Teile des Quelltexts:
und
Wenns nötig ist, gebe ich auch noch den ganzen Quelltext her.
Hat irgendjemand eine Idee, wo die Bugs sitzen könnten?
Vielen Dank für jeden Beitrag,
LG runagrog
1. Wenn ich mithilfe der Befehle einen Bereich auswähle (bspw. 0 - 700) (also mit dem Befehl primes 700), zieht die Bremse nicht und scheinbar wird die Methode, die bis zum Sanktnimmerleinstag Primzahlen berechnet, ausgeführt. Merkwürdigerweise funktionieren sowohl primes 699 und primes 749, aber es scheint ein paar Bereiche zu geben, die mein Programm nicht mag. Ich habe bisher den Bereich um 300 aufwärts, 430 und 700 aufwärts gefunden. Was geht da falsch?
2. Wenn ich beispielsweise primes 100 eingebe, ist soweit alles richtig, aber 101 wird ebenfalls zu den Primzahlen von 0 - 100 (der sollte es jedenfalls sein) gezählt und als Ergebnis ausgegeben. Bei primes 200 wird 211 noch dazugezählt, und bei Primes 402 noch die 409. Es wird scheinbar immer noch die nächste Primzahl mit angegeben, die außerhalb des Bereichs liegt.
Hier wären die wahrscheinlich interessantesten Teile des Quelltexts:
Code:
static String Usereingabe = new String();
static String temp = new String();
static StringBuffer zahl1 = new StringBuffer();
static StringBuffer zahl2 = new StringBuffer();
static long num1, num2;
public static void primes() {
long numtotest = 1;
long numtestdiv = 2;
while(true) {
if(numtotest == 1) {
numtotest++;
continue;
}
while(numtestdiv < numtotest) {
if ((numtotest % numtestdiv) == 0 || numtotest == 1) {
numtotest++; numtestdiv = 2; continue;
} else {
numtestdiv++;
}
}
System.out.print(numtotest + " ");
numtotest++; numtestdiv = 2;
}
}
public static void primes1() {
long numtotest = 1;
long numtestdiv = 2;
while(numtotest <= num1) {
if(numtotest == 1) {
numtotest++;
continue;
}
while(numtestdiv < numtotest) {
if ((numtotest % numtestdiv) == 0){
numtotest++; numtestdiv = 2; continue;
} else {
numtestdiv++;
}
}
System.out.print(numtotest + " ");
numtotest++; numtestdiv = 2;
}
}
public static void primes12() {
long numtotest = num1;
long numtestdiv = 2;
while(numtotest <= num2) {
if(numtotest == 1) {
numtotest++;
continue;
}
while(numtestdiv < numtotest) {
if ((numtotest % numtestdiv) == 0 || numtotest == 1) {
numtotest++; numtestdiv = 2; continue;
} else {
numtestdiv++;
}
}
System.out.print(numtotest + " ");
numtotest++; numtestdiv = 2;
}
}
@SuppressWarnings("empty-statement")
public static void usereingabe () throws IOException {
System.out.print("\n\n> ");
BufferedReader in = new java.io.BufferedReader(new InputStreamReader(System.in));
while((Usereingabe = in.readLine()).length() == 0);
}
Code:
public static void init() {
System.out.println("Programm zur Berechnung von Primzahlen");
System.out.println("Fuer Hilfe geben Sie bitte ein:\n\thelp");
System.out.println("Um Informationen zu einem bestimmten Befehl zu erhalten,");
System.out.println("tippen Sie bitte \n\thelp [Befehl].");
}
public static void user () throws IOException {
usereingabe();
if(Usereingabe.charAt(0) == 'p' && Usereingabe.charAt(1) == 'r' && Usereingabe.charAt(2) == 'i' && Usereingabe.charAt(3) == 'm' && Usereingabe.charAt(4) == 'e' && Usereingabe.charAt(5) == 's') {
if (Usereingabe.length() == 6) {
primes();
} else if (Usereingabe.contains("0 ") == false && Usereingabe.contains("1 ") == false && Usereingabe.contains("2 ") == false && Usereingabe.contains("3 ") == false && Usereingabe.contains("4 ") == false && Usereingabe.contains("5 ") == false && Usereingabe.contains("6 ") == false && Usereingabe.contains("7 ") == false && Usereingabe.contains("8 ") == false && Usereingabe.contains("9 ") == false) {
int i = 7;
while(i <= Usereingabe.length()-1) {
zahl1.append(Usereingabe.charAt(i));
i++;
}
temp = zahl1.toString();
num1 = Integer.parseInt(temp);
primes1();
}
else if (Usereingabe.contains("0 ")|| Usereingabe.contains("1 ")|| Usereingabe.contains("2 ")|| Usereingabe.contains("3 ")|| Usereingabe.contains("4 ")|| Usereingabe.contains("5 ")|| Usereingabe.contains("6 ")|| Usereingabe.contains("7 ")|| Usereingabe.contains("8 ")|| Usereingabe.contains("9 ")){
int i = 7;
while(i <= Usereingabe.length() - 1) {
if(Usereingabe.charAt(i) != ' '){
zahl1.append(Usereingabe.charAt(i));
i++;
}else{
i++;
break;
}
}
temp = zahl1.toString();
num1 = Integer.parseInt(temp);
while(i <= Usereingabe.length() - 1) {
zahl2.append(Usereingabe.charAt(i));
i++;
}
temp = zahl2.toString();
num2 = Integer.parseInt(temp);
primes12();
}
}
}
public static void main(String[] args) throws IOException {
init();
while(true) {
user();
}
}
Wenns nötig ist, gebe ich auch noch den ganzen Quelltext her.
Hat irgendjemand eine Idee, wo die Bugs sitzen könnten?
Vielen Dank für jeden Beitrag,
LG runagrog