2016-10-15 2 views
0

Я только начинаю с java, и для моего класса intro необходимо создать циклы с дозорным значением 0 для преобразования введенных USD в GBP. Есть некоторая ошибка во время выполнения, и кажется, что я создал в бесконечном цикле. Может ли кто-нибудь помочь? Заранее спасибо!Значение Sentinel в Java

import java.util.Scanner; 
/** 
* Prompts user for today's conversion of USD to GBP 
* Then prompts user for USD value, which will inform user of GBP 
* Prompting loop for other USD values, util sentinel value of (0) is encountered 
* hint: while loop shouldnt include prompt for exchange rate. When user enteres 0, program will print terminating "goodbye" message and end 
*/ 
public class AP6_DollarToPound 
{ 
    public static void main(String[] args) 
    { 
     Scanner in = new Scanner(System.in); 

     double amount = 0; 
     int rate = in.nextInt(); 
     int value = in.nextInt(); 

     System.out.println("Enter today's US Dollar to British Pound Sterling exchange rate: "); 
     System.out.println("Enter a value in US Dollars: "); 

     while (value != 0); 
     { 
      value = in.nextInt(); 
      if (value != 0) 
      { 
       amount = rate * value; 
       System.out.println("Value in GBP is: " + value); 
      } 
      else 
      { 
       System.out.println("Goodbye!"); 
      } 
     } 
     } 
    } 
+1

Добавляя к другим ответам, вы также печатаете 'значение', когда вы должны печатать' amount' вместо этого. – Turamarth

+0

Спасибо всем! Сообщество переполнения стека настолько полезно при изучении языков программирования. –

ответ

1

Вы в то время как петля ошибаетесь.

while (value != 0); 

Это означает, что итерация пока значение не равно нулю. И в этом случае он всегда не равен нулю.

Вы должны сделать что-то вроде этого:

while (value != 0) 
{ 
    // Change value as you like 
} 
1

вы случайно набрали ';' после того, как цикл while заставляет внутренние элементы никогда не получать доступ.

0

Ваш заказ немного перепутан.

Если вы хотите показать описание для того, что пользователь должен ввести, то этот звонок System.out.println() должен быть до вашего звонка до Scanner.nextInt().

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

Возможно, вы также захотите проверить, действительно ли вход представляет собой число, а не только любую строку символов. Это можно сделать, проверив Scanner.hasNextInt().