package caishuzi;
import java.util.Random;
import java.util.Scanner;
public class User3 {
public static void main(String[] args){
int a = new Random().nextInt(101);
while(a == 0){
a = new Random().nextInt(101);
}
//System.in 代表标准键入,就是键盘输入
Scanner sc = new Scanner(System.in);
while(sc.hasNextInt()){
try{
int guess = Integer.valueOf(sc.next());
System.out.println("您好,您输入的数字是:" + guess);
if(guess > a){
System.out.println("您好,您猜大了。");
}
else if(guess < a){
System.out.println("您好,您猜小了。");
}
else{
System.out.println("您好,您猜对了。");
break;
}
}catch(NumberFormatException n){
System.out.println("您好,您的输入有误!");
}
}
}
}
出现的问题是:在我自己的电脑上,上面的代码运行正常,。但是换了台电脑,重新运行时,int guess = Integer.valueOf(sc.next());程序在这行出错,提示是:不能将Integer包装类直接赋给 int 类型的 变量 guess,,这是什么原因导致的呢?
将这行代码换为:int guess = Integer.parseInt(sc.next());
或
int guess = sc.nextInt();
(则可能运行正常)
出现上面的情况是什么原因导致的呢?求大神们帮忙解解疑惑,先谢谢各位了
java在1.5版本加入的语法糖,就是可以自动完成基本类型的装箱拆箱。
所谓自动装箱,就是可以自动调用Integer.vauleOf(int)
将int包装为Integer;
自动拆箱,就是可以自动调用Integer.intValue()
将Integer拆为int。
出现你描述的问题,应该是因为你能正常运行的Java环境版本不低于1.5,而报错的环境Java版本低于1.5。
Integer.parseInt()返回的是int,sc.nextInt()返回的也是int,Integer.valueOf返回的是 int 包装类Integer,从Jdk1.5开始,java支持自动装箱拆箱。
而Scanner 也是Since Jdk1.5,Scanner没报错,拆箱报错,所以我怀疑jdk版本是对的,项目编译环境可能在1.4以下,可以查看以下