我在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);
}
}
答案 0 :(得分:4)
当我尝试在Linux上编译上述程序时,它确实可以正常工作
这实际上是相当令人惊讶的,我不能买它。再检查一遍,不应该。
short
是一个16位有符号2的补码整数。它的最大值为32767
,您正在为其分配99789
。它绝对超出范围。您需要明确地将其类型转换为short
:
short s = (short)99789;
short s1 = 100; // this would however work
虽然你会看到奇怪的输出。额外的位将被截断。最好直接使用int
。
现在,在float
的情况下,浮点文字默认为double
。要获得float
,您需要在结尾添加F
或f
。所以,将那个改为:
float f = 99.99f;
答案 1 :(得分:0)
这很简单。你需要做一个类型转换:
float f = 99.99f;
或
float f = (float)99.99; // This is a type cast
您正在尝试将“大”数字存储到短变量中。 short只能存储从-32.768到32.767的值。
答案 2 :(得分:0)
使用此代码
在您的代码中,您尝试将较大的数据类型分配给较小的数据类型,最终会导致精度损失,这是不允许的,因此您需要显式的类型转换
短s =(短)99789;而对于浮动,你有两个操作
float f = 99.99f;
或
float f =(float)99.99;(因为十进制值默认为double)
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);
}
请记住,只允许那些不会导致精度损失的转换
答案 3 :(得分: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:短数据类型是16位带符号的二进制补码整数。它的最小值为-32,768,最大值为32,767(含)。与字节一样,相同的准则也适用:在内存节省实际上很重要的情况下,您可以使用short来节省大型阵列中的内存。
有关java数据类型的更多信息,请参阅此处http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
答案 4 :(得分:0)
short
是16位整数(0-65535无符号; -32768-32767有符号)。你对s的价值太大,所以它被视为int
。
Java默认将99.99
视为双精度。只需将f
附加到该float f = 99.99f
)的末尾即可解决该问题。
答案 5 :(得分:0)
short s = 99789;
short是 16位值,而int是 32位 .99789或任何数字在java中预定义为 int 。所以你必须手动转换你正在缩小数据类型。
short s = (short) 99789;
答案 6 :(得分:0)
错误在:
short s = 99789;
“短”数据类型的最大值为32767。
99789> 32767会导致精度损失。
而是尝试:
int s = 99789;
类似地:
float f = 99.99;
应该是双倍的:
double f = 99.99;
希望有所帮助!