Java 什么';我的线圈怎么了?不断地得到无接触的例外

Java 什么';我的线圈怎么了?不断地得到无接触的例外,java,arrays,loops,Java,Arrays,Loops,在maze[r][c]=scan.next()行中,我一直得到一个NoTouchElement异常。我如何解决这个问题 try { Scanner scan = new Scanner(f); String infoLine = scan.nextLine(); int rows=0; int columns=0; for(int i = 0; i<infoLine.length();i++){

maze[r][c]=scan.next()行中,我一直得到一个NoTouchElement异常。我如何解决这个问题

  try {
        Scanner scan = new Scanner(f);
        String infoLine = scan.nextLine();
        int rows=0;
        int columns=0;
        for(int i = 0; i<infoLine.length();i++){
            if(Character.isDigit(infoLine.charAt(i))==true){
                rows = (int)infoLine.charAt(i);
                columns = (int)infoLine.charAt(i+1);
                break;
            }
        }

        String [][] maze = new String[rows][columns];
        int r = 0;
        while(scan.hasNextLine()==true && r<rows){
            for(int c = 0; c<columns;c++){
                maze[r][c]=scan.next();
            }
            r++;
        }
        return maze;
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
试试看{
扫描仪扫描=新扫描仪(f);
字符串infoLine=scan.nextLine();
int行=0;
int列=0;

对于(int i=0;i请查看代码的这一部分:

    while(scan.hasNextLine()==true && r<rows){  // 1
        for(int c = 0; c<columns;c++){          // 2
            maze[r][c]=scan.next();             // 3
        }                                       // 4
        r++;                                    // 5
    }                                           // 6

while(scan.hasNextLine()==true&&r查看这部分代码:

    while(scan.hasNextLine()==true && r<rows){  // 1
        for(int c = 0; c<columns;c++){          // 2
            maze[r][c]=scan.next();             // 3
        }                                       // 4
        r++;                                    // 5
    }                                           // 6

while(scan.hasNextLine()==true&&r将布尔值与true进行比较与仅使用布尔值本身相同。也就是说,只要有“x==true”,就可以简单地使用“x”。将布尔值与true进行比较与仅使用布尔值本身相同。也就是说,只要有“x==true”,就可以简单地使用“x”。好的,您的代码中有一个期望,即您的扫描有足够的条目覆盖所有列。您的数据违反了该期望。您可以更改内部
for
循环,以匹配外部
while
循环的格式-并包括一个hasNextLine()检查-但这会在一条直线的中间退出。如果你同意的话,那可能是你的解决方案。如果不是,你需要在更高的层次上重新考虑这个问题。我相信你对行和列的判断是错误的。<代码>行=(int)INFLINE。;
将获得int的ascii值,但您真正想要的似乎是由char表示的整数。
行=Character.digit(infoLine.charAt(i),10)
可能是最好的方法。数字参数中的10是怎么做的?此外,该循环会导致列最大化,并且除了最后一列外,不允许任何列填充。我忘记了为每行重新初始化c。已修复。您的代码中有一个期望,即您的扫描有足够的条目覆盖所有列。您的数据i达到预期效果。您可以更改内部
for
循环,以匹配外部
while
循环的格式,并包括一个hasNextLine()检查-但这会在一条直线的中间退出。如果你同意的话,那可能是你的解决方案。如果不是,你需要在更高的层次上重新考虑这个问题。我相信你对行和列的判断是错误的。<代码>行=(int)INFLINE。;
将获得int的ascii值,但您真正想要的似乎是由char表示的整数。
行=Character.digit(infoLine.charAt(i),10)
可能是最好的方法。数字参数中的10有什么作用?此外,该循环会导致列最大化,并且不允许除最后一列之外的任何列填充。我忘记为每行重新初始化c。已修复。