【问题标题】:Java: using a string to stop a while loop and it is consumed by following scanner inputJava:使用字符串来停止 while 循环,并由以下扫描仪输入消耗
【发布时间】:2018-10-04 01:06:34
【问题描述】:

我正在学习以 Java 为语言的编程入门课程。我们正在做的任务让我很困扰。我有一个 while 循环询问数值,当输入字符串值时终止,即

while (sc.hasNextDouble())
{...}

这之后是另一个扫描器输入,它正在使用

if (sc.hasNextLine())

问题是我正在使用一个字符串来终止顶部 while 循环,然后扫描器立即使用该循环。我尝试使用带有显式 break; 语句的顶部循环的 if/else 语句,但这不起作用。不管我做什么,它仍然在传递。我应该如何处理这个?任何指针表示赞赏。

编辑:根据要求,这里是一些实际代码。请记住,这是针对任意班级分配的,因此可能没有多大意义。

 //Request user input
        System.out.print("Please enter multiple double values. Enter q or any non double value to quit.");
        double doubleValue = 0.00; //declare doubleValue variable (for each entered double value)
        double sum = 0.00; //declare starting sum value variable at 0.00
        double doubleAverage = 0.00; //declare average of doubles variable
        //declare largest double value variable as MIN_VALUE to ensure any entered value is larger
        double largestDouble = Double.MIN_VALUE;
        //declare smallest double value variable as MAX_VALUE to ensure any entered value is smaller
        double smallestDouble = Double.MAX_VALUE; //declare smallest double value variable
        int count = 0; //set starting count

        while (sc.hasNextDouble())
        {
          doubleValue = sc.nextDouble();
          //System.out.print("Please enter another double value. Enter -1 to stop entering values.");
          sum = sum + doubleValue;
          count++;
          }

        /*
        * This section prompts the user for their first name and printd it in reverse.
        */

        System.out.print("Please enter your first name:");
        String fName = ""; //declare fName variable before requesting input
        if (sc.hasNext())
        {
          fName = sc.next();

在此之后,字符串值用于终止我在最后用于 if 语句的 while 循环。

【问题讨论】:

  • 你能用你到目前为止所做的事情和最小的例子来更新帖子
  • 只需将所有输入作为文本,然后检查是否应该退出
  • 我无法将输入作为文本,需要在上部扫描仪中将多个双精度作为输入。
  • 为什么不能将String 转换为Double
  • 因为这是一个班级作业,我们应该做的事情有一些任意的限制。我们必须请求多个双打,执行一些计算,然后从那里请求用户名。输入也应该经过验证。

标签: java while-loop java.util.scanner


【解决方案1】:

不从sc 扫描器传递数据的一种方法是创建一个新的扫描器对象。让我们称之为scan。这样,当您引用 scan 时,它不会知道之前的 sc 扫描仪输入。

在您的if 语句中,您将引用scan 扫描仪而不是sc 扫描仪。

数据从while 循环传递到您的if 语句的原因是因为它们都引用同一个对象,当您调用sc.hasNext() 时,它会读取您输入到控制台的最后内容。

【讨论】:

  • 我已经更新了它看看这是否有效。您对 if 语句的使用是正确的。我第一次读错了你的问题。
  • 这是一个很好的建议,更重要的是它帮助我了解了实际情况。新手通常不会考虑的事情类型!谢谢。
【解决方案2】:

尝试将输入读取为字符串,然后将其转换

Scanner sc= new Scanner(System.in);

String in = sc.nextLine();

while (!in.equals("q")) {

    try {
        Double d = Double.valueOf(in);
        // do whatever you like with d 
    } catch (NumberFormatException ex) {
        System.out.println("oi, that is not a double");
    }
    in = sc.nextLine();

}

【讨论】:

  • 其中一些包括我们没有涉及的内容,但它给了我一个思考的框架。我还没有尝试过用 ! 来检查值的方法。如果为真则终止。
【解决方案3】:

我的导师提供的另一个有效选项是使用虚拟变量来使用扫描仪输入,即类似于:

String fName = sc.next(); // Consume the Q or q here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2016-02-21
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多