【问题标题】:Loop repeats twice when I run the program运行程序时循环重复两次
【发布时间】:2016-12-12 21:14:53
【问题描述】:

我是一名新程序员,并试图制作一个添加所有用户输入数字的程序。代码如下:

import java.util.Scanner;
import java.io.*;
public class Adding
{
private int numOfInt, newInt;

/**
 * Constructor for objects of class Adding
 */
public Adding()
{
    // initialise instance variables
    Scanner console = new Scanner( System.in );
    System.out.print("How many integers will be added?");
    numOfInt = console.nextInt();
    newInt = 0;
}
public int addIntegers()
{
    int count = 0;
    int sum = 0;
    while( count <= numOfInt )
    {
        System.out.println("The count is: " + count + " and the current sum is: " + sum);
        count = count + 1;
        Scanner console = new Scanner( System.in );
        System.out.println("Enter an integer: ");
        newInt = console.nextInt();
        sum = sum + newInt;
    }
    return sum;
}
public void displaySum()
{
            System.out.println("the sum is " + this.addIntegers());
}
}

这是主要的第二类:

import java.util.Scanner;
import java.io.*;
public class AddingMain
{
public static void main( String[] args )
{
   Adding add = new Adding();
   add.addIntegers();
   add.displaySum();
}
}

但是,循环重复了两次(如下面的输入所示,经过编辑以节省空间),实际上忽略了输入的第一组数字:

将添加多少个整数?3

计数为:0,当前总和为:0

输入一个整数:1

计数为:1,当前总和为:1

输入一个整数:2

计数为:2,当前总和为:3

输入一个整数:3

计数为:3,当前总和为:6

输入一个整数:1

计数为:0,当前总和为:0

输入一个整数:2

计数为:1,当前总和为:2

输入一个整数:3

计数为:2,当前总和为:5

输入一个整数:4

计数为:3,当前总和为:9

输入一个整数:5

总和是 14

有人可以解释为什么会发生这种情况以及如何解决吗?谢谢!

【问题讨论】:

  • 循环应该重复多少次?
  • 我建议你学习如何使用调试器来单步调试你的代码以找出发生了什么。
  • 每次调用addIntegers 都会执行一次循环。计算代码中addIntegers 调用的次数。
  • 另外,通过在while循环中使用&lt;=,当numOfInt为3时,你执行了4次。你可能打算使用&lt;

标签: java loops


【解决方案1】:

循环重复两次,因为您调用了两次addIntegers()

你第一次打电话给addIntegers()add.addIntegers(); 下次你打电话给addIntegers() 时写System.out.println("the sum is " + this.addIntegers());

this.addIntegers() 再次调用方法addIntegers()

补充建议

您可以通过仅在类级别实例化 Scanner 对象来使用扫描仪对象,即您不需要在代码中两次实例化扫描仪对象。

你可以这样走——

public class Adding
{
private int numOfInt, newInt;
Scanner console = new Scanner( System.in );

【讨论】:

    【解决方案2】:

    您可以从 main() 中删除 addInteger() ,这样它只会被调用一次,然后您就会得到所需的输出。

    【讨论】:

      【解决方案3】:
       add.addIntegers(); // invoke 1st time
       add.displaySum();  // invoke 2nd time
      

      你显式调用了一次addIntegers(),它被displaySum()第二次调用了

      添加整数和显示总和是两个不同的职责,你最好将它们分成两个函数。使displaySum() 仅显示总和,而不是添加整数。您可以在Adding 类中创建实例变量sum,并将 displaySum() 更改为

      public int displaySum(){
          return sum;
      }
      

      【讨论】:

        【解决方案4】:

        原因是addIntegers 被调用了两次,一次在main 中,一次在displaySum 中。所以,循环也执行了两次。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-05-28
          • 2018-06-25
          • 2021-11-21
          • 2015-01-13
          • 1970-01-01
          • 2023-03-24
          • 2016-02-22
          相关资源
          最近更新 更多