我制作棋盘,国王将根据国际象棋的规则行走。 下面是它的制作方法,它为King的i和j坐标调用了2次,I Made输入变量String来检查这个King的坐标是否已经存在。比我尝试将其转换为整数,这个转换似乎有问题。
import java.util.*;
public class King {
int move(String iK){
Random rand = new Random();
Integer coordinateKing = Integer.valueOf(iK);
if (iK == null){
coordinateKing = rand.nextInt(8);
}else{
int caseI;
switch(caseI = rand.nextInt(2)){
case 0: if (coordinateKing < 8){ coordinateKing++; } else {caseI = rand.nextInt(2);}
break;
case 1: if (coordinateKing > 0){ coordinateKing--; } else {caseI = rand.nextInt(2);}
break;
default:
break;
}
}
return coordinateKing;
}
}
我有这样的问题:
Exception in thread "main" java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Integer.java:454)
at java.lang.Integer.valueOf(Integer.java:582)
at chess_engine.King.move(King.java:6)
at chess_engine.MainClass.main(MainClass.java:12)
提前致谢!
答案 0 :(得分:2)
你叫这个
Integer coordinateKing = Integer.valueOf(iK);
但iK
可以为NULL。先进行空检查
答案 1 :(得分:2)
您正在尝试将iK
转换为整数,然后再检查它是否为null
。这一行是抛出异常的地方:
Integer coordinateKing = Integer.valueOf(iK);
但是你在后面的行上检查if (iK == null)
。您应该先进行null
测试。您可以在coordinateKing
语句之前声明if
并在if...else
块中设置其值来解决此问题。
Integer coordinateKing = 0;
if (iK == null){
coordinateKing = rand.nextInt(8);
} else {
coordinateKing = Integer.valueOf(iK);
int caseI;
...
}
答案 2 :(得分:1)
异常是不言自明的。 iK是一个空字符串,无法转换为整数。当iK为空时,你想要什么整数?
答案 3 :(得分:1)
这是一个运行时错误:这里iK正在接收一个空值,一个Integer对象可以存储null,但方法valueOf()
在内部使用parseInt()
方法返回一个int值而null不能转换为int