【问题标题】:How to Code in Java to generate the given series如何用 Java 编写代码以生成给定的系列
【发布时间】:2013-07-01 04:57:00
【问题描述】:

如何在 Java 中生成给定的系列

JDK1.0
JDK1.1
JDK1.2
JDK1.3
JDK1.4
JDK1.5
JDK1.6

我在 for 循环中使用了浮动变量,但它会产生错误。

for(float f=1.0;f<1.7;f=f+0.1)
     System.out.println("JDK"+f);

【问题讨论】:

  • 您到底想做什么?打印 7 个字符串?
  • @morgano 是的,我是初学者,正在学习 JAVA 中的循环。
  • 如果您可以显示您使用过的代码并说明导致了什么错误以及发生在哪里,那么应该有人能够解释为什么会发生错误。在没有代码的情况下,这是非常困难的。
  • 这是一个很简单的问题。你可以用谷歌搜索出来。
  • 在周末抽出一些时间来阅读每位计算机科学家应该了解的关于浮点运算的知识,您将了解与为什么这些代码永远不会按预期工作相关的浮点数的所有内容: docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

标签: java loops for-loop


【解决方案1】:
for(int i = 0; i < 7; i++){
    System.out.println("JDK 1." + i);
}

我认为这应该可以解决您的问题

【讨论】:

    【解决方案2】:
    for(float f=1.0; f<1.7; f=f+0.1)
         System.out.println("JDK"+f);
    

    需要改成

    for(float f=1.0F; f<1.7; f=f+0.1F)
        System.out.println("JDK"+f);
    

    或者使用双倍

    for(double f=1.0; f<1.7; f=f+0.1)
        System.out.println("JDK"+f);
    

    使用双精度更好,因为与浮点运算相关的精度损失不太明显。例如,第一个可能的修复输出:

    JDK1.0
    JDK1.1
    JDK1.2
    JDK1.3000001
    JDK1.4000001
    JDK1.5000001
    JDK1.6000001
    

    第二个修复输出:

    JDK1.0
    JDK1.1000000014901161
    JDK1.2000000029802322
    JDK1.3000000044703484
    JDK1.4000000059604645
    JDK1.5000000074505806
    JDK1.6000000089406967
    

    您可以按如下方式修改第二个修复来解决此问题:

    for(double f=1.0; f<1.7; f=f+0.1)
        System.out.printf("JDK%.1f\n", f);
    

    【讨论】:

    • +1 至少试图指出 OP 遇到的问题以及原因
    【解决方案3】:

    你可以使用这些代码段

    for(int f=0;f<7;f=f+1)
         System.out.println("JDK 1."+f);
    

    【讨论】:

      【解决方案4】:

      至少有两个问题...

      首先是Java假定所有十进制数都是double。这意味着您尝试使用浮点赋值,Java 会尝试警告您由于转换可能会丢失精度。

      您可以通过使用double 告诉编译器您希望将该值视为float 来解决这个问题,方法是使用f 作为后缀

      例如...

      for(float f=1.0f;f<1.7f;f+=0.1f) {
          System.out.println("JDK"+f);
      }
      

      您将面临的下一个问题是打印出来的数字不符合您的要求,因为0.4 不完全是0.4

      在这种情况下,您需要使用某种NumberFormat 来按您想要的方式格式化数字。

      例如...

      NumberFormat nf = NumberFormat.getNumberInstance();
      for(float f=1.0f;f<1.7f;f+=0.1f) {
          System.out.println("JDK"+nf.format(f));
      }
      

      【讨论】:

        【解决方案5】:

        ...为什么不呢

        for(int f=0;f<7;f++)
            System.out.println("JDK1."+f);
        

        此外,您也因此遇到了编译问题:

        float f = 1.0; // Compilation error
        

        0.1 默认是双精度,必须是:

        float f = 1.0f;
        

        【讨论】:

          【解决方案6】:
          for(double i=1.0;i<=1.7;i=i+0.1){
                      BigDecimal bd = new BigDecimal(i);
                      System.out.println("JDK"+bd.setScale(1,1));
                  }
          

          【讨论】:

            【解决方案7】:

            试试这个:

            public static void main(String[] args) {
            
                    DecimalFormat df = new DecimalFormat("#.##");
            
                    for (double f = 1.0; f < 1.7; f = f + 0.1) {
            
                        System.out.println("JDK" + df.format(f));
                    }
                }
            

            你不能使用float,但是可以像这样使用double

            【讨论】:

              【解决方案8】:

              如果它低于 1.7,为什么不直接拥有

              for(int f = 1; f < 7; f++){
                System.out.println("JDK1." + f);
              }
              

              【讨论】:

                猜你喜欢
                • 2015-07-23
                • 2010-10-03
                • 2023-03-27
                • 1970-01-01
                • 1970-01-01
                • 2014-05-06
                • 1970-01-01
                • 2012-03-03
                • 2018-11-18
                相关资源
                最近更新 更多