2016-11-21 6 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

Вам необходимо обновить 'num' в цикле while, используя' num = scan.nextInt() '. –

+1

Пройдите через свой код на бумаге, чтобы посмотреть, что он делает в этом цикле. Если вы это сделаете, вы увидите, что он никогда не получает данные из сканера. –

+0

Я сделал это, и теперь он фактически выводит что-то, но это не правильный вывод, и он делает это только для одной строки. – 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 не равен нулю, p работает бесконечно, потому что вы никогда не изменяете значение num в своем цикле while. Рискну предположить, что вы должны сказать:

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

Однако, я не знаю точного намерения вашего кода, так что это может быть не нужный подход. Точка, однако, вам нужно изменить num в вашем цикле while, иначе вы будете бесконечно зацикливаться.

+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 в вашем файле. Надеюсь, я достаточно ясен.

Смежные вопросы