我正在尝试允许用户键入两个输入并检查用户是否具有键值,但是它出现错误。这是示例代码
public static void add train{
int a,b;
System.out.println("Enter train ID");
System.out.println("(**Example '1001'**)");
b=sc.nextInt();
System.out.println("1. to Night Safari");
System.out.println("2. to River Safari");
System.out.println("3. to Zoo Main Entrance ");
System.out.println("Enter a destination for the train");
a= sc.nextInt();
}
这是我之前从用户那里获取输入的代码,现在我需要预订火车票
public static void book(){
System.out.println("Where do you want to go?");
System.out.println("1. to Night Safari");
System.out.println("2. to River Safari");
System.out.println("3. to Zoo Main Entrance ");
a=sc.nextInt();
if (a==1 && b !=null){//incomparable types: int and <nulltype>
System.out.println("Valid");
}
else if (a==2 && b !=null){
System.out.println("Valid");
}
//and more
else{
System.out.println("Invalid");
}
}
因为用户可以键入可选项,所以我需要检查列车是否存在才能处理预订 我的代码出了什么问题,或者这是不可能用Java完成的?
答案 0 :(得分:2)
int
永远不能为null,因为它是原始数据类型,因此b !=null
是不可计算的。
如果您使用的是Scanner类的nextInt()
命令,则它将始终返回一个整数值(如果用户未输入int,则会导致运行时异常)
答案 1 :(得分:1)
根据定义,b
的类型为int
,而int
个变量不能为null
。
如果您需要能够在null
中存储b
,则有一种可能性是将其类型更改为Integer
。
答案 2 :(得分:1)
我认为你误解了null
的含义。 null
并未引用某个值,而是引用引用(阅读this答案以获取有关它的更多信息)。最重要的是,可以引用null
的唯一内容是复杂类型,例如String
s,Integer
s,您定义的类等。原始类型(int
s ,boolean
等)不是引用,因此永远不能引用null
答案 3 :(得分:1)
尝试捕获更好,而不是这样。如果用户输入字符串或null,则执行try-catch将保存您。
Scanner sc = new Scanner(System.in);
try
{
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println("valid numbers");
}
catch(InputMismatchException ex)
{
System.out.println("Invalid numbers");
}
答案 4 :(得分:0)
您可以将int
更改为对象类型Integer
。然后,您可以将其与null
进行比较。
答案 5 :(得分:0)
int不能为null,因为它是基本类型。因此,检查b是否为null是完全错误的,如果我们更正您的代码,它将是这样的:
if (a==1 || a==2){
System.out.println("Valid");
}
else{
System.out.println("Invalid");
}
答案 6 :(得分:-3)
如果b应该是int,你可以尝试
if (a==1 && b instanceof int)