2016-11-21 20 views
-1

私はプロジェクトで作業していましたが、出力に何も表示されません。私は既に無数の乱数を出力した中括弧の上にSystem.out.printを移動する以外は出力を出さなかったたくさんのものを試しました。それがあるので、ここで短いコードです:Javaプログラムは実行されますが、出力はありません

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(); 
} 

} 

私は出力がない言ったように、ここでINの内容が

入力されたファイルです:

期待出力は次のようになります。

19/3

1/1

電流出力: 何もあなたがここに無限ループ作成した

+3

whileループで 'num = scan.nextInt()'を使って 'num'を更新し続ける必要があります。 –

+1

あなたのコードを紙の上を歩いて、そのループで何がやっているのかを見てください。これを行うと、スキャナからデータが得られないことがわかります。 –

+0

私はこれをして、実際には何かを出力しましたが、正しい出力ではなく、1行でしかありません – icecreeper01

答えて

1

ループ内でスキャナから読み取る必要があります。以下はあなたのために更新されたコードです。

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

私は試しましたが、間違った出力を返しました – icecreeper01

+0

あなたの予想される出力は何ですか? –

+0

病気を記述に追加する – icecreeper01

1

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); 

あなたからnumに読まをあなたのファイルであり、numがゼロでない場合、loo whileループでnumの値を決して変更しないので、pは無限に実行されます。

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); 

しかし、私はあなたのコードの正確な意図を知らないので、これは必要なアプローチではないかもしれません:私はあなたが言う必要があることを推測するベンチャー企業です。しかし、ポイントは、whileループでnumを変更する必要があります。そうしないと、無限ループします。

+0

だったのですが、num!= 0の間に中かっこの中にあることを意味していますか? – icecreeper01

+0

私はそれを変更しましたが、それでも5/4を返す – icecreeper01

+0

@ icecreeper01、 'do-while'ループは、条件(この場合はnum!= 0)がチェックされる前に最初の繰り返しが実行されるループです。 – SpencerD

0

num変数は決してその値を変更しないので、ファイル内のすべての行についてこれを行う必要があります。あなたはwhile(scan.hasNextInt())のようなあなたのガードを更新しなければならないので、あなたのファイルにint値があり、scan.nextInt()を使ってそれを選ぶまで続けることができます。残りのコードは基本的に同じです。 `scan.nextInt() 'で選択した値が0であれば、必要なものを出力し、カウンタ変数をリセットしてから、あなたのファイルの最後の0。私は十分なはっきりしていると思います。

関連する問題