größter gemeinsamer teiler

baskefab

Mitglied
hallo, ich möchte ein programm schreiben um zwei zahlen einzulesen und dann den größten gemeinsamen teiler davon ausrechnen zu lassen. bin schon fast fertig nur ich habe ein problem dass das programm bei der eingabe 0 0 beendet werden soll. wär super wenn mir jemand meinen fehler aufzeigen könnte. :toll: hier der code:



import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

/**
* This program is to read two numbers and calculate their greatest
* divider in common
* @throws IOException Throws an IOException
*
*/

public final class Shell {
private Shell() { }
/*
* This is the main method
*/
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader (new
InputStreamReader (System.in));

execute(in);

}


//auxiliary method to read two numbers
private static void execute(BufferedReader in) throws IOException {
boolean quit = false;
while (!quit){
boolean error = false;
System.out.println("gcd> ");

String input = in.readLine();
String[] tokens = input.trim().split("\\s+");

if (tokens.length != 2){
System.out.println("Error! 2 args!");
error = true;
}


if(!error) {

try{
int i = Integer.parseInt(tokens[0]);
int j = Integer.parseInt(tokens[1]);
if ( i == 0 && j == 0){
break;
} else {
System.out.println("gcd(" + i + ", " + j + ") = "
+ gcd(i,j));
}
} catch(NumberFormatException e) {
System.err.println("Error! Not numeric!");
error = true;
}


}}
}




// method to calculate the greatest divider in common of both numbers
public static int gcd ( int x, int y){
if (y < 0){

return gcd(x, -y);

}else if (x < 0){

return gcd(-x , y);
}else if ( y == 0){
return Math.abs(x);

}else if (x > y){
return gcd(x-y,y);
}else if (y > x){
return gcd (y , x);
}else if (x == y){
return x;
}else {
return -1;
}

}


}
 
Java:
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

/**
* This program is to read two numbers and calculate their greatest
* divider in common
* @throws IOException Throws an IOException
*
*/

public final class Shell {
private Shell() { }
/*
* This is the main method
*/
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader (new
InputStreamReader (System.in));

execute(in);

}


//auxiliary method to read two numbers
private static void execute(BufferedReader in) throws IOException {
boolean quit = false;
while (!quit){
boolean error = false;
System.out.println("gcd> ");

String input = in.readLine();
String[] tokens = input.trim().split("\\s+");

if (tokens.length != 2){
System.out.println("Error! 2 args!");
error = true;
}


if(!error) {

try{
int i = Integer.parseInt(tokens[0]);
int j = Integer.parseInt(tokens[1]);
if ( i == 0 && j == 0){
break;
} else {
System.out.println("gcd(" + i + ", " + j + ") = "
+ gcd(i,j));
}
} catch(NumberFormatException e) {
System.err.println("Error! Not numeric!");
error = true;
}


}}
}




// method to calculate the greatest divider in common of both numbers
public static int gcd ( int x, int y){
if (y < 0){

return gcd(x, -y);

}else if (x < 0){

return gcd(-x , y);
}else if ( y == 0){
return Math.abs(x);

}else if (x > y){
return gcd(x-y,y);
}else if (y > x){
return gcd (y , x);
}else if (x == y){
return x;
}else {
return -1;
}

}


}

Entschuldigung schon mal im Voraus, sollte ich gleich Doppelposten machen^^
 
Dein Programm beendet doch wenn man
Code:
0 0
eingibt.

Java:
if ( i == 0 && j == 0){
break;
}
 
[JAVA=53]} catch(NumberFormatException e) {[/code]
dürfte denke ich mal
[c]} catch(Exception e) {[/c]
da du mit break ja selber abbrichst, und NumberFormat eine StandartException für das Formatieren von Integer zu String ist.

Aber ich persönlich finde deinen Code sowieso etwas aufwendig^^
 
bei eclipse geht es ja auch aber ich will es unter linux im terminal ausführen und das scheitert kläglich, und
der grund muss im code liegen. vielleicht könnt ihr nochmal drüber sehen.???:L
 
Wenn es in eclipse geht und in der Konsole nicht, dann liegt es sicherlich nicht am Code.
Was für eine Fehlermeldung kommt denn und was hast du gemacht um das Programm aus der Konsole heraus zu starten?

Gruß
 
es ist so, dass ich das programm von einem anderen programm überprüfen lasse, ich weiß auch nur soviel, dass
die standard konsole verwendet wird. ansonsten rattert das programm, nachdem ich den code eingeschickt habe,
alles ab und macht gewisse testeingaben und danach zeigt es mir an wo die fehler sind.
und dieses programm sagt mir andauernd, dass bei der eingabe 0 0, was zum ende führen soll,
dies nicht erreicht wird und ich weiß nicht wie es darauf kommt aber irgendwie muss ich versuchen es dazu
zu bringen es doch zu schlucken ??
vielleicht kennt ihr ja eine andere möglichkeit den fall 0 0 zu bearbeiten🙁
 

Zurück
Oben