【问题标题】:Multiple numbers sum loop in JavaJava中的多个数字求和循环
【发布时间】:2023-04-01 16:25:01
【问题描述】:

我对编程和在我的 Uni 中学习 Java 101 完全陌生,并且已经与这个问题作斗争了一个小时,在网上搜索并且不知道出了什么问题。

所以练习是编写一个程序来提示数字,读取它们并将它们求和,直到用户输入一个 0 并且程序终止。我的问题是我的程序忽略了我输入的第一个数字,我总是要输入两次。似乎循环是问题,但我怎么知道?到目前为止,这是我的代码:

import java.util.Scanner;

public class SumOfMultipleNumbers {

    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
        int sum = 0;               

        while (true) {
            int read = Integer.parseInt(reader.nextLine());
            if (read == 0) {
                break;
            }

            read = Integer.parseInt(reader.nextLine());
            sum += read;

            System.out.println("Sum now: " + sum);
        }

        System.out.println("Sum in the end: " + sum);
    }
}

那么我该如何更正我的代码,以便每次输入数字而不是第二次时它都会添加到总和中?

【问题讨论】:

    标签: java loops


    【解决方案1】:

    那是因为您在检查零输入后读取了一个新行。

    while (true) {
        int read = Integer.parseInt(reader.nextLine());
        if (read == 0) {
            break;
        }
    
        // this is not needed: read = Integer.parseInt(reader.nextLine());
        sum += read;
    

    【讨论】:

      【解决方案2】:

      你在打电话

      read = Integer.parseInt(reader.nextLine());
      

      每个循环两次

      当你声明read时一次

      int read = Integer.parseInt(reader.nextLine());
      

      然后再一次,在你检查零之后

      read = Integer.parseInt(reader.nextLine());
      

      你只需要做一次


      您可能想要使用do while 循环

      do
      {
          // read variable in
          // print for sum
      }while(variableReadIn != 0);
      

      【讨论】:

        【解决方案3】:

        您在循环开始时调用reader.nextLine(),目的是确定您是否应该中断循环,然后您再次执行此操作以获得实际数字的总和。这就是您的代码第一次忽略输入值的原因。

        您要做的是只调用一次reader.nextLine(),然后检查该值是否符合您的退出条件。我可能会这样做:

        while (true) {
            String inputText = reader.nextLine();
        
            if(inputText.equals("0")){
                break;
            }
        
            int read = Integer.parseInt(inputText);
            sum += read;
        
            System.out.println("Sum now: " + sum);
        
        }
        

        【讨论】:

          【解决方案4】:

          每次调用 reader.nextLine() 时,都会从 Scanner 读取一个新行,在检查零并将其添加到总和之前调用此函数。

          最好不要只使用while(true) 循环,而应使用带有while(read != 0) 之类条件的循环

          最后,您应该关闭扫描程序以防止损坏。在这个程序中它不会造成太大的伤害,但这并不意味着你可以忘记它。

          import java.util.Scanner;
          
          public class SumOfMultipleNumbers {
          
              public static void main(String[] args) {
                  Scanner reader = new Scanner(System.in);
          
                  int sum = 0;
          
                  int read;
          
                  do {
                      sum += read;
          
                      System.out.println("Sum now: " + sum);
          
                      read = Integer.parseInt(reader.nextLine());
                  } while (read != 0)
          
                  System.out.println("Sum in the end: " + sum);
          
                  reader.close();
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-07-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-05-16
            • 2013-11-23
            相关资源
            最近更新 更多