2016-11-21 5 views
-1

Hey Leute, ich arbeitete an einem Projekt und die Ausgabe gibt nichts. Ich habe schon eine ganze Reihe von Dingen ausprobiert, die alle keine Ausgabe ergaben, außer dass ich System.out.print über die Klammer geschoben habe, die gerade eine unendliche Anzahl von Zufallszahlen ausgedruckt hat. Es ist ein kurzer Code so ist es hier:Java-Programm läuft, aber gibt keine Ausgabe

import java.util.Scanner; 
import java.io.IOException; 
import java.io.File; 

public class ACSLPrintsJR { 
public static int value(int num){ 
int [] array = {0,16,16,8,8,4,4,2,2,1,1}; 
    return array[num]; 
} 

public static void main(String[] args) throws IOException { 
    int top = 1; 
    int bottom = 1; 
    File file = new File("ACSLPRINTSJR.IN"); 
    Scanner scan = new Scanner(file); 
    int num = scan.nextInt(); 
    while (num != 0){ 
    num = scan.nextInt(); 
     if (num % 2 == 0) 
      top += 1 + value(num); 
     else 
      bottom += 1 + value(num); 
    }  
    System.out.println(top+"/"+bottom); 
scan.close(); 
} 

} 

Wie ich sagte, es gebe keine Ausgabe und hier ist der Inhalt des IN

Input-Datei ist:

Erwartete Ausgabe lautet:

19/3

1/1

Stromausgang: Nichts

+3

Sie müssen 'num' in der while-Schleife mit' num = scan.nextInt() 'aktualisieren. –

+1

Gehen Sie Ihren Code auf Papier durch, um zu sehen, was er in dieser Schleife macht. Wenn Sie dies tun würden, würden Sie sehen, dass es nie Daten vom Scanner erhält. –

+0

Ich tat das und jetzt gibt es tatsächlich etwas aus aber es ist nicht die richtige Ausgabe und es tut es nur für eine Zeile – icecreeper01

Antwort

1

Sie müssen vom Scanner in der Schleife lesen. Im Folgenden finden Sie den aktualisierten Code für Sie.

public class ACSLPrintsJR { 
    public static int value(int num) { 
     int[] array = {0, 16, 16, 8, 8, 4, 4, 2, 2, 1, 1}; 
     return array[num]; 
    } 

    public static void main(String[] args) throws IOException { 
     File file = new File("ACSLPRINTSJR.IN"); 
     Scanner scan = new Scanner(file); 
     int num; 
     while (scan.hasNext()) { 
      int top = 1; 
      int bottom = 1; 
      while ((num = scan.nextInt()) != 0) { 
       if (num % 2 == 0) 
        top += value(num); 
       else 
        bottom += value(num); 
      } 
      System.out.println(top + "/" + bottom); 
     } 
     scan.close(); 
    } 
} 
+0

Ich habe es versucht, aber es gab die falsche Ausgabe – icecreeper01

+0

Was ist Ihre erwartete Ausgabe? –

+0

füge das in die Beschreibung ein – icecreeper01

1

Sie haben eine unendliche Schleife hier erstellt:

int num = scan.nextInt(); 
while (num != 0){ 
    if (num % 2 == 0) 
     top += 1 + value(num); 
    else 
     bottom += 1 + value(num); 
}  
System.out.println(top+"/"+bottom); 

Sie in num lesen aus Ihre Datei, und wenn num nicht Null ist, das Klo p läuft unendlich, weil Sie niemals den Wert num in Ihrer while-Schleife ändern. Ich wage zu vermuten, dass man sagen müssen:

int num = scan.nextInt(); 
do{ 
    if (num % 2 == 0) 
     top += 1 + value(num); 
    else 
     bottom += 1 + value(num); 

    num = scan.nextInt(); 
}while(num != 0); 
System.out.println(top+"/"+bottom); 

aber ich weiß nicht, die genaue Absicht des Codes, so könnte dies nicht der gewünschte Ansatz. Punkt ist jedoch, müssen Sie num in Ihrer While-Schleife ändern oder Sie werden unendlich Schleife.

+0

bedeutet, dass es Dinge innerhalb seiner Klammern tut, während num! = 0? – icecreeper01

+0

ich habe es geändert, aber es gibt immer noch 5/4 – icecreeper01

+0

@ icecreeper01, eine 'do-while'-Schleife ist eine Schleife, in der die erste Iteration ausgeführt wird, bevor die Bedingung (in diesem Fall 'num! = 0') überprüft wird. – SpencerD

0

Die Variable num ändert ihren Wert nie und ich denke, dass Sie dies für jede Zeile in Ihrer Datei tun müssen. Sie müssen Ihren while guard wie while(scan.hasNextInt()) aktualisieren, damit Sie weitermachen können, bis ein int-Wert in Ihrer Datei vorhanden ist und Sie ihn dann mit scan.nextInt() auswählen. Der Rest des Codes ist im Grunde gleich. Ich sah jetzt Ihre Bearbeitung so jetzt, wenn der Wert, den Sie mit `scan.nextInt() 'auswählen ist gleich 0 Sie müssen drucken, was Sie brauchen, setzen Sie Ihre Zählervariablen zurück und gehen Sie in die Schleife, bis Sie die auswählen Letzte 0 in Ihrer Datei. Ich hoffe ich bin genug klar.

Verwandte Themen