0

我已经在 windows 上的 eclipse 上编写了我的第一个 java 程序。我最近开始在 linux 上编写 java 程序。

当我尝试在 Linux 上编译上述程序时,它确实可以正常工作,但是当我尝试在 Windows 上编译时,出现以下错误。

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    Type mismatch: cannot convert from int to short
    Type mismatch: cannot convert from double to float

public class TypeDemo {

    public static void main (String args[])
    {
            byte b = 8;
            long a = 1000011334;
            int c = 76;
            short s = 99789;

            float f = 99.99;
            double d = 99979.9879;
            boolean bool = true;
            char ch = 'y';

            System.out.println ("b = "+b);
            System.out.println ("a = "+a);
            System.out.println ("c = "+c);
            System.out.println ("s = "+s);
            System.out.println ("f = "+f);
            System.out.println ("d = "+d);
            System.out.println ("bool = "+bool);
            System.out.println ("ch = "+ch);
    }
}
4

7 回答 7

4

当我尝试在 Linux 上编译上述程序时,它确实可以正常工作

这实际上很令人惊讶,我买不起。再看一遍,应该不行。

short是一个 16 位有符号 2 的补码整数。它的最大值是32767,并且您正在分配99789给它。绝对超出范围。您需要将其显式类型转换为short

short s = (short)99789;
short s1 = 100;   // this would however work

虽然你会在那里看到奇怪的输出。多余的位将被截断。最好int直接使用。

现在,在 的情况下float,浮点文字默认为double. 要获得float,您需要在末尾附加一个For f。因此,将其更改为:

float f = 99.99f;
于 2013-10-06T04:21:45.733 回答
0

这很容易。您需要进行类型转换:

float f = 99.99f;

或者

float f = (float)99.99;  // This is a type cast

您正在尝试将“大”数字存储到一个短变量中。short 只能存储从 -32.768 到 32.767 的值。

于 2013-10-06T04:19:37.537 回答
0

使用此代码

在您的代码中,您试图将较大的数据类型分配给较小的数据类型,这将导致精度损失,这是不允许的,因此您需要显式类型转换

短 s = (短) 99789; 对于浮动,您有两种选择

浮动 f = 99.99f;

或者

float f = (float)99.99;(因为十进制值默认为双精度)

public static void main(String args[]) {
    byte b = 8;
    long a = 1000011334;
    int c = 76;
    short s = (short) 99789;

    float f = 99.99f;
    double d = 99979.9879;
    boolean bool = true;
    char ch = 'y';

    System.out.println("b = " + b);
    System.out.println("a = " + a);
    System.out.println("c = " + c);
    System.out.println("s = " + s);
    System.out.println("f = " + f);
    System.out.println("d = " + d);
    System.out.println("bool = " + bool);
    System.out.println("ch = " + ch);
}

请记住,只允许那些不会导致精度损失的转换

于 2013-10-06T04:20:57.850 回答
0
        `float f = 99.99;`     //need to include f at last or need to type cast;

需要

            float f = 99.99f;
            or
            float f = (float)99.99; 

       short s = 99789;      //exceeded the limit  

极限应该是

short:short 数据类型是一个 16 位有符号二进制补码整数。它的最小值为 -32,768,最大值为 32,767(含)。与 byte 一样,适用相同的准则:在内存节省实际上很重要的情况下,您可以使用 short 来节省大型数组中的内存。

有关 java 数据类型的更多信息,请参阅此处http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

于 2013-10-06T04:21:37.927 回答
0

Ashort是一个 16 位整数(0-65535 无符号;-32768-32767 有符号)。您对 s 的值太大,因此被视为int相反。

默认情况下, Java 被99.99视为双精度。只需附加f到该 ( float f = 99.99f) 的末尾即可解决该问题。

于 2013-10-06T04:21:47.027 回答
0
short s = 99789;

short 是16 位值,而 int 是32 位.99789 或任何数字在 java中预定义为int 。所以你必须手动输入你正在缩小数据类型。

 short s = (short) 99789;
于 2013-10-06T04:22:46.713 回答
0

错误在于:

short s = 99789;

“short”数据类型的最大值为 32767。

99789 > 32767 这将导致精度损失。

而是尝试:

int s = 99789;

相似地:

float f = 99.99;

应该是双:

double f = 99.99;

希望有帮助!

于 2013-10-06T04:28:58.537 回答