Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo, ich bin ein blutiger Anfänger und habe einen Code geschrieben, der sämtliche Teiler einer Zahl (und den Quotient der Division) auflisten soll. Nun habe ich jedoch das Problem, dass beim ausführen ein CPU-Kern voll ausgelastet wird und sonst nichts passiert. Ich vermute, dass ich irgendwo eine Endlosschleife eingebaut habe, aber ich finde sie nicht.
Andere Verbesserungsvorschläge sind herzlich willkommen
Danke im voraus!
P. S. : Ich benutze Eclipse als IDE und das in Mac OS X integrierte JDK 1.6
Java:
import java.util.*;
public class Main {
public static void main(String[] args) {
try {
System.out.println("Bitte Zahl eingeben:");
Scanner input = new Scanner(System.in);
long divident = input.nextLong();
long divisor[][]; //erstelle Array zum speichern
divisor = new long[(int) divident][1];
long i;
i = 1;
int c;
c = -1;
while (i <= divident) {
long temp;
long counter;
counter = 0;
do {
temp = divident;
temp = temp - i;
counter ++; //Subtrahiere i solange bis es nicht mehr geht. Wenn temp 0 ist, ist die Zahl ein Divident. counter ist der Quotient.
} while (i >= temp);
if (temp == 0) {
c ++;
divisor[(int) (c)][0] = i;
divisor[(int) (c)][1] = counter; //c ist die Anzahl der Dividenten
}
i ++;
}
System.out.println("");
for (long out = 0; out == c; out ++) {
System.out.println(divident + " / " + divisor[(int) out][0] + " = " + divisor[(int) out][1]); //Gebe jeden Dividenten nacheinander aus
}
} catch (Exception e) {
System.out.println("ERROR, system halted...");
}
}
}
Ich vermute auf die schnelle, dass er hier dran liegt:
Java:
do {
temp = divident;
temp = temp - i;
counter ++; //Subtrahiere i solange bis es nicht mehr geht. Wenn temp 0 ist, ist die Zahl ein Divident. counter ist der Quotient.
} while (i >= temp);
du änderst in der Schleife i nicht und temp wird jedesmal zu Beginn auf divident gesetzt. Wenn die Schleife also nach dem ersten Durchlauf nicht abbricht, wird sie nie abbrechen.
@ andiv Warum nicht und was sollte ich sonst nehmen (eclipse meldet min "=" "Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from long to boolean"
P. S. : Bin vorübergehend nicht zu erreichen (Abendessen...)
import java.io.*;
public class Teiler
{
public static void main (String[] args) throws IOException
{
InputStreamReader Input = new InputStreamReader(System.in);
BufferedReader DataIn = new BufferedReader(Input);
System.out.print("Gebe eine ganze Zahl ein: ");
int divident = Integer.parseInt(DataIn.readLine());
for (int i=divident; i>0; i--)
{
if (divident%i == 0)
{
System.out.println(divident+" / "+i+" = "+divident/i);
}
}
}
}
@ JAVAnnik Das funktioniert auch sehr gut, aber ich möchte mit einem Array arbeiten (die Daten sollen in einem späteren Schritt auch noch abrufbar sein).
@ fjord Das stimmt, ich habe temp jedes mal zurück gesetzt, aber auch wenn ich temp vor der do-Schleife intialisiere, komme ich nicht weiter...
@ toffel vielleicht bin ich zu blöd, aber der "Debug Current Instruction Pointer" zeigt mir jedes mal auf Zeile 36, aber die Ausgabe ist doch korrekt, in dem Array müssten Daten liegen...
Deine innere Schleife macht das aber nicht. temp und i haben dort immer den gleichen Wert -> Endlosschleife.
Es müsste wohl eher so aussehen:
Java:
long temp = divident;
long counter = 0;
do {
temp = temp - i;
counter ++; //Subtrahiere i solange bis es nicht mehr geht. Wenn temp 0 ist, ist die Zahl ein Divident. counter ist der Quotient.
} while (temp > 0);
Die Ausgabe sieht auch nicht richtig aus, probiere es mit: