如何在某些线后停止扫描仪

时间:2017-01-20 23:19:01

标签: java java.util.scanner

我正在做一个程序,要求扫描仪读取一定数量的行,但是,在达到该数字后它不会停止。这是处理这部分的代码:

for(int i=0;i<normal;i++)
     {
         int x=0;
         int y=0;
         String ans=in.nextLine();
         int[] arraya=createaarray(ans);
         x=arraya[0];
         y=arraya[1];
         matrix[x][y]=true;
     }

Normal-1是它需要读取的行数,而createaarray是一种方法,它需要两个数字,它们之间有空格,并将它们放在一个数组中。因此x将是第一个数字,而y是第二个数字。但是,在读取“正常”行数后,扫描程序将不会关闭,并且任何输入都将导致数字格式化。示例输入和错误:

0 1
0 2
2 3
4 3
6 1
1 5
7 3

Exception in thread "main" java.lang.NumberFormatException: For input   string: ""
at     java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:592)
at java.lang.Integer.parseInt(Integer.java:615)
at treez.createaarray(treez.java:83)
at treez.run(treez.java:45)
at treez.<init>(treez.java:8)
at treez.main(treez.java:90)

我知道这是由空输入引起的,但是,我不知道如何修复它。一些帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

如果输入无效,假设您的createaarray方法返回emptynull数组,则需要在执行其余代码之前添加if条件,以使确定你有一个有效的array,例如:

if(null != arraya && arraya.length > 1){
    x=arraya[0];
    y=arraya[1];
    matrix[x][y]=true;
}

此外,一旦完成,您可以通过调用scanner方法关闭close()

答案 1 :(得分:0)

如果“normal - 1”是要读取的行数,则应该循环“正常 - 1”次。在你的代码中,我看到你从0开始并以“normal”结束。数组完全“正常”迭代。应该这样做:

for(int i=0 ; i < normal - 1; i++) {
     int x = 0;
     int y = 0;
     String ans = in.nextLine();
     int[] arraya = createaarray(ans);
     x = arraya[0];
     y = arraya[1];
     matrix[x][y] = true;
 }