Java中的Sentinel值

时间:2016-10-15 20:49:56

标签: java loops infinite sentinel

我刚刚开始使用java,而我的intro类必须创建一个endinel值为0的循环,以将输入的USD转换为GBP。有一些运行时错误,它似乎是我在无限循环中创建的。有人可以帮忙吗?提前谢谢!

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!");
            }
        }
        }
    }

4 个答案:

答案 0 :(得分:1)

你的循环是错误的。

while (value != 0);

这意味着迭代,而值不为零。在这种情况下,它始终不为零。

你应该这样做:

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

答案 1 :(得分:1)

你不小心打了一个';'在while循环之后导致永远不会访问内部元素。

答案 2 :(得分:0)

你的订单有些混乱。

如果您想显示用户应输入的内容的说明,则必须在致电System.out.println()之前致电Scanner.nextInt()

在你的情况下,它会显示一个空白屏幕,等到用户输入由空格或换行符分隔的两个数字,然后显示你的两行。然后,只有当用户输入的第二个数字不为零时,它才会继续,在这种情况下,它会等待他输入另一个数字。如果该数字为零,则循环继续更多的输入请求,直到最后一个不为零。只有这样才会输出你的结果。

您可能还想检查输入是否实际上是一个数字,而不仅仅是任何字符串。这可以通过检查Scanner.hasNextInt()

来完成

答案 3 :(得分:0)

您必须将数量初始化为1而不是0 双倍金额= 1; 因为在多重运算中1对操作没有影响