【问题标题】:Adding a short to a 2D short array element giving error in JAVA在 JAVA 中向 2D 短数组元素添加一个短路会导致错误
【发布时间】:2013-01-05 16:30:54
【问题描述】:

下面的代码给出了以下错误:

错误:C:\Users\Laptop\algs4\hello\Main.java:8: 可能丢失精度

找到:int

必填:短

import java.util.* ; 
import java.math.* ; 
import java.io.* ; 
public class Main{
    public static void main(String[] args){
        short[][] arr = new short[1][2]; 
        short val = 9 ; 
        arr[0][0] = arr[0][0] + val ; 
    }
}

但以下没有错误。

import java.util.* ; 
import java.math.* ; 
import java.io.* ; 
public class Main{
    public static void main(String[] args){
        short[][] arr = new short[1][2]; 
        short val = 9 ; 
        arr[0][0] += val ; 
    }
}

这可能是什么原因?

【问题讨论】:

    标签: java


    【解决方案1】:

    如下:

        arr[0][0] = arr[0][0] + val ; 
    

    两个参数都先提升为int,进行加法,结果隐式缩小为short。这可能会导致精度损失,从而导致错误。

    第二个版本:

        arr[0][0] += val ; 
    

    defined by the Java Language Specification等价于

        arr[0][0] = (short)((int)arr[0][0] + (int)val); 
    

    换句话说,这表现得好像有一个显式转换,因此没有错误。

    你可以在第一个版本中通过添加显式转换来实现相同的效果:

    arr[0][0] = (short)(arr[0][0] + val); 
    

    【讨论】:

      【解决方案2】:

      试试arr[0][0] = (short)(arr[0][0] + val);

      arr[0][0] += val ;
      

      编译器为你进行转换

      【讨论】:

        【解决方案3】:
        import java.util.* ; 
        import java.math.* ; 
        import java.io.* ; 
        public class timous{
            public static void main(String[] args){
                short[][] arr = new short[1][2]; 
                short val = 9 ; 
                arr[0][0] = (short)(arr[0][0] + val) ; 
            }
        }
        

        此代码没有给出任何错误。 :)

        【讨论】:

          猜你喜欢
          • 2012-01-16
          • 2017-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-31
          • 2011-03-10
          • 1970-01-01
          相关资源
          最近更新 更多