当前位置: 首页 > 知识库问答 >
问题:

循环增加额外的时间

马泰
2023-03-14

下面的while循环会额外运行一段时间。我试图执行一个用户输入,从用户那里接受10个有效数字并打印它们的总和。然而,while循环执行额外的时间并请求第11个输入。

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

    while(i <= 10){
    i++;
    
    System.out.println("Enter number " + "#" +i);
    boolean isValidNumber = sc.hasNextInt();

    if(isValidNumber){
        int userChoiceNumber = sc.nextInt();
        sum += userChoiceNumber;
    }else{
        System.out.println("Invalid Input");
    }
   }
  }
   System.out.println("The sum of your entered numbers are = " + sum);

}

共有3个答案

太叔天宇
2023-03-14

这里的主要问题是在while循环开始时增加变量。如果这就是你想要的,那没关系,但是如果你想在循环达到10时停止循环,你需要像while(i

i = 0;
while(i < 10){
    i++;
    //code here
}

这将使使用i的代码使用介于1和10之间的值。使用

i = 0;
while(i < 10){
    //code here
    i++;
}

这将使使用i的代码使用0到9之间的值。使用

人们执行增量循环的另一种方式是执行for循环,而不是,而循环看起来像:

for(int i = 0; i < 10; i++){
    //code here
}

这也允许您创建一个只在循环内的变量,所以您可以在for循环内创建它,而不是在方法的开头或循环之前创建它。不过,如果变量在其他地方使用,这就不好了。

景永望
2023-03-14

首先,确保格式正确。(我已经缩进了你的循环,将你的输出移到了主类中,修复了一些花括号/循环结尾)

public static void main(String[] args) {

    int i = 1, sum = 0;
    Scanner sc = new Scanner(System.in);

    while(i <= 10){
        i++;
    
        System.out.println("Enter number " + "#" +i);
        boolean isValidNumber = sc.hasNextInt();
    
        if(isValidNumber){
            int userChoiceNumber = sc.nextInt();
            sum += userChoiceNumber;
        }
        else{
            System.out.println("Invalid Input");
        }
    }

    System.out.println("The sum of your entered numbers are = " + sum);
}

好吧,运行我发现的代码,询问的次数是正确的,但是input propt显示的数字是错误的——第一个输入提示从2开始,最后一个提示从11开始。

原因是,i在请求输入之前运行,因此它在输出之前先计数。

这可以很容易地通过移动所说的i到刚好在其他子句下面来解决,如下所示:

        else{
            System.out.println("Invalid Input");
        }
        i++
    }
沈琛
2023-03-14

除了这些很好的注释之外,如果你得到一个有效的输入,你可能应该只增加“i”:

while(i <= 10) {
  System.out.print("Enter number " + "#" +i + ": ");
  boolean isValidNumber = sc.hasNextInt();
  if(isValidNumber){
    int userChoiceNumber = sc.nextInt();
    sum += userChoiceNumber;
    i++;
  }else{
    System.out.println("Invalid Input");
    sc.next();
  }
}

请注意,当输入错误时,需要使用“sc.next()”将其清除。

 类似资料:
  • 问题内容: 我有一个带有某些样式的简单html页面,但我不明白为什么会增加一些顶部边距? 来源如下: 如果我添加“ margin-top:0;” 到了空间已经消失了……但是直到我明白为什么我才感到不高兴。 问题答案: 上的空白来自浏览器添加到元素的默认样式。例如,如果您打开的并检查元素,您将看到这样的样式。该用户代理样式表是指浏览器默认样式。保证金变成16px为浏览器有一个默认。 由于浏览器之间的

  • 26.8. 增加对额外元数据API的支持 如果你希望提供对其它元数据API的支持,这很容易实现。 简单实现org.springframework.metadata.Attributes接口,并把它作为你的元数据API的门面。你就可以像前文所示那样在你的bean定义中包含这个对象。 所有象AOP元数据驱动自动代理这样的使用元数据的框架服务,都自动能使用你新建的元数据提供者。

  • 我有一个图/网络,它显然由一些节点和一些边组成。每条边都有一个权重,或者在本例中是一个成本。每条边也有一个附加到它的距离和一个类型。因此,基本上,重量/成本是根据边缘的距离以及两种类型边缘的一些其他度量预先计算的。 然而,在我的情况下,我希望增加一些额外的成本,比如说每100米左右,但只适用于一种边缘。但是我甚至不确定是否有可能根据Dijkstra等算法中路径中先前步骤的总和添加额外的成本/距离?

  • 问题内容: 我有一个简单的变量,今天增加了一个月: 今天是2013年1月,所以我希望能回到2013-02,但我却能获得2013-03。我不知道为什么要跳到三月。 问题答案: 跳到3月是因为今天是1月29日,加上一个月就表示2月29日(该日期不存在),因此它将移至下一个有效日期。 这也将在很多个月的31日发生,但在1月到2月的情况下显然更明显,因为2月较短。 如果您对月份中的某天不感兴趣,而只希望它

  • 这是一个正常的嵌套循环,具有复杂性 我很难理解为什么下一个循环也有复杂性,即使它打印的语句更少 有什么想法吗?

  • 我正在逐个迭代字符串对象列表中的元素: 在这里,每次我调用list上的get()时,列表都会从其一端一直迭代到第i个元素——因此上面循环的复杂性是O(n^2)。 是a.)对于增强型for循环,与上面相同,还是b.)对于循环,将指针保持在最后一个指针所在的位置,因此下面循环的复杂性是O(n)? 如果上面的情况(b)——我想是这样的——在列表上使用迭代器有什么好处吗。这是简单的迭代--没有回头路 蒂亚