2015-10-16 15 views
0

Я начинаю изучать Java-программирование. В принципе, я не могу заставить последний бит моего кода работать. Прежде чем я покажу вам свой код, я думаю, что это хорошая идея показать, как должен быть результат. Результатом программы должно быть:System.out.println не работает

Please Enter either S(supply) or R(replenish) followed by ID and quantity. 
R  p122. 10 
New Stock-level for p122(Chain) is 58 
S. p124. 20 
New Stock-level for p125(Pedal) is 18 
S. p905. 20 
No part found with ID p905 
.....// enter empty string to terminate 
//Show final stock levels of all Parts 

Хотя, я в состоянии выполнить основной расчет и все, я не могу распечатать конечные уровни запасов всех частей. Я действительно не понимаю, почему. Вот мой код:

import java.util.Scanner; 

public class TestPart { 

public static void main(String[] args) { 

    // Array of 5 Part objects 
    // Part[] part = new Part[5]; 
    Part[] part = new Part[5]; 
    part[0] = new Part("p122", "Chain", 48, 12.5); 
    part[1] = new Part("p123", "Chain Guard", 73, 22.0); 
    part[2] = new Part("p124", "Crank", 400, 11.5); 
    part[3] = new Part("p125", "Pedal", 3, 6.5); 
    part[4] = new Part("p126", "Handlebar", 123, 9.50); 

    ///////// Test Class 2 //////// 
    Scanner scanner = new Scanner(System.in); 
    System.out.println("Please Enter either S (supply) or R (replenish) followed by ID and quantity."); 
    while (scanner.hasNext()) { 

     String sOrR = scanner.next(); 
     String inputId = scanner.next(); 
     int amount = scanner.nextInt(); 

     for (int i = 0; i < 5; i++) { 
      String id = part[i].getID(); 
      // Find ID in array 
      if (id.equals(inputId)) { 
       // S or R 
       if (sOrR.equals("R")) { 
        part[i].replenish(amount); 
       } else { 

        part[i].supply(amount); 

       } 
       System.out.println("New Stock-level for " + part[i].getID() + "(" + part[i].getName() + ") is " 
         + part[i].getStockLevel()); 
      } 

     } 
     if ((inputId.equals(part[0].getID()) == false) && (inputId.equals(part[1].getID()) == false) 
       && (inputId.equals(part[2].getID()) == false) && (inputId.equals(part[3].getID()) == false) 
       && (inputId.equals(part[4].getID()) == false)) { 
      System.out.println("No part found with ID " + inputId); 
     } 

    } 
    scanner.close(); 

    System.out.println("Final stock level for all the parts: "); 
    for (int i = 0; i < 5; i++) { 
     System.out.println("Final Stock-level for " + part[i].getID() + "(" + part[i].getName() + ") is " 
       + part[i].getStockLevel()); 
    } 
} 
} 

Моя программа прекрасно выполняет вычисления части. Однако на нем не отображаются конечные уровни.

Please Enter either S(supply) or R(replenish) followed by ID and quantity. 
    R  p122. 10 
    New Stock-level for p122(Chain) is 58 
    S. p124. 20 
    New Stock-level for p125(Pedal) is 18 
    S. p905. 20 
    No part found with ID p905  
+0

Почему вы не отлаживаете свой код? –

+2

Определите «не работает» –

+0

программа выполняет вычисления и распечатывает, например: Пожалуйста, введите либо S (поставка), либо R (пополняется), за которым следует идентификатор и количество. R p122. 10 Новый уровень запасов для p122 (Цепь) составляет 58 S. p124. 20 Новый уровень запасов для p125 (педаль) составляет 18 S. p905. 20 Не найдено ни одной детали с ID p905 –

ответ

0

Ваше состояние прерывания (а именно scanner.hasNext()) не будет выходить из цикла while всякий раз, когда пользователь вводит пустую строку. Я не знаю, заметили ли вы, но всякий раз, когда пользователь только обращается к ключу возврата, ничего не происходит, потому что Scanner.next не запускается только при возврате. Хотя имейте в виду, что он хранит ваши данные. Это означает, что после ввода «действительного» ввода (например, abc) Scanner предоставит вам все, что только что введенный пользователь до этого действительного ввода. Просто небольшой пример, чтобы продемонстрировать, что я имею в виду:

Scanner scanner = new Scanner(System.in); 
while(scanner.hasNext()) { 
    System.out.println("\"" + scanner.next() + "\""); 
} 
scanner.close(); 
System.out.println("finished"); 

Итак, если вы хотите, чтобы прервать программу после того, как пользователь ввел пустую строку, это невозможно с java.util.Scanner.hasNext. Я рекомендую добавить еще один символ в свой вариант «S или R», что позволяет пользователю выйти из программы, как это:

if(sOrR.equals("E")) break; 

Вы должны поместить это непосредственно за String sOrR = scanner.next();.

+0

Спасибо, ты на самом деле ответил на мой вопрос. Однако я не могу добавить еще один аргумент, чтобы завершить цикл while. Я могу использовать только пустую строку ... –

+0

@TamLam Затем я помету ваш ответ как дубликат https://stackoverflow.com/questions/7320315/how-to-test-for-blank-line-with-java -scanner – mezzodrinker

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