【问题标题】:Java: For loop not displaying all output numbersJava:For循环不显示所有输出数字
【发布时间】:2020-12-11 17:36:53
【问题描述】:

我正在尝试创建一个 For 循环程序,其中用户输入起始编号和结束编号,然后按下按钮显示值。示例:

但是,当我运行我的程序并按下按钮时,它只显示结束数字,如下所示:

到目前为止,我的代码如下所示:到目前为止,我还没有发现任何逻辑错误。

 private void valuesButtonActionPerformed(java.awt.event.ActionEvent evt) {                                         
        
        int starting;
        starting = Integer.parseInt(startingInput.getText());
        
        int ending;
        ending = Integer.parseInt(endingInput.getText());
        
        for (int i = starting; i <= ending; i++){
            outputField.setText(i + "");
        }
    }    



【问题讨论】:

  • 您只是将 outputField 重置为循环中的 every 值,因此您只需要最后一个。您需要连接这些数字。看看java.lang.StringBuilder
  • java.lang.StringBuilder ;-)

标签: java for-loop numbers output


【解决方案1】:

下面这行是替换outputField的旧内容:

outputField.setText(i + "");

你应该这样写:

outputField.setText(outputField.getText() + i + " ");

即将i + " " 追加到outputField 的旧内容。

【讨论】:

    【解决方案2】:

    您对setText 的调用是覆盖输出字段中的字符串;最后的调用是i == ending,所以结尾的数字就是你看到的。您想要的是将新数字连接到前一个输出字符串。

    一种解决方案可能是将输出存储为字符串,在循环中附加每个数字,然后将文本设置为输出字符串。

    String output = "";
    
    for (int i = starting; i <= ending; i++) {
        output += i + " ";
    }
    
    outputField.setText(output);
    

    【讨论】:

      【解决方案3】:

      这个

          for (int i = starting; i <= ending; i++){
              outputField.setText(i + "");
          }
      

      将输出设置为一个数字,然后是下一个,然后是下一个......并且发生得如此之快,你所看到的就是最后一个。

      试试这个:它会累积到目前为止的输出,并用它来显示。

          String s = "";
          for (int i = starting; i <= ending; i++) {
              s = s + i + " ";
              outputField.setText(s);
          }
      

      这仍然在输出中间结果,所以有点浪费,而且发生得太快而无法看到。但它最接近你的原作,所以我就这样离开了。您可以将 setText 调用移至循环结束后仅输出最终结果。

      其他答案提到了StringBuilder,但我没有;我犹豫一次要介绍太多新概念。 StringBuilder 在性能很重要的情况下发挥作用,但这不适用于这里,而且我认为“显而易见性”更适合介绍性练习。

      【讨论】:

        【解决方案4】:

        您错过了连接所有数字的步骤:

            StringBuilder text = new StringBuilder();
            for (int i = starting; i <= ending; i++){
              text.append(i).append(" ");
            }
            outputField.setText(text.toString());
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-03-29
          • 2011-01-23
          • 2017-02-02
          • 2011-04-16
          • 2012-03-07
          • 1970-01-01
          • 1970-01-01
          • 2014-02-27
          相关资源
          最近更新 更多