字符串到整数转换有问题

时间:2014-01-14 14:11:34

标签: java

我制作棋盘,国王将根据国际象棋的规则行走。 下面是它的制作方法,它为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)

提前致谢!

4 个答案:

答案 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

相关问题