尝试使用java.util.Scanner +将文件写入不同矩阵时读取文本文件时出现异常java.util.NoSuchElementException

时间:2014-04-12 07:58:50

标签: java java.util.scanner

我是java的新手,我编写这段代码来总结两个矩阵。 通过从input.in文件中读取来填充矩阵。 我有两个关于此代码的问题: 1.在执行中我面对这个错误: 我不知道是什么导致了这个错误。

Exception in thread "main" java.util.NoSuchElementException at java.util.Scanner.throwFor(Scanner.java:907) at java.util.Scanner.next(Scanner.java:1530) at java.util.Scanner.nextInt(Scanner.java:2160) at java.util.Scanner.nextInt(Scanner.java:2119) at s.s.main(s.java:36) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

我的代码是:

package example; 

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner; 


public class aaaa {
public static void main (String [] args)  throws FileNotFoundException{
int [][] matrix1 = new int[4][4];
int [][] matrix2 = new int[4][4];
int [][] matrix3 = new int[4][4];
String file = "c:\\input.txt";



    Scanner text = new Scanner(new File(file));

    while (text.next()!=null){
        for (int i=0;i<4;i++)
            for (int j=0;j<4;j++)
                matrix1[i][j]= text.nextInt();
    }


    while (text.next()!=null){
        for (int i=0;i<4;i++)
            for (int j=0;j<4;j++)
                matrix2[i][j]= text.nextInt();
        }

    for (int i=0;i<4;i++)
        for (int j=0;j<4;j++)
         System.out.println(matrix3[i][j] + matrix3[i][j]);}}

这段代码出了什么问题?

替换PabloFranciscoPérez建议后的新代码:

public class aaaa {

public static void main (String [] args)  throws FileNotFoundException{
    int [][] matrix1 = new int[4][4];
    int [][] matrix2 = new int[4][4];
    int [][] matrix3 = new int[4][4];
    String file = "c:\\input.txt";



    Scanner text = new Scanner(new File(file));

    for (int i=0;i<4;i++)
    {
        if(!text.hasNextInt()) break;
        for (int j=0;j<4;j++)
        {
            if(!text.hasNextInt()) break;
            matrix1[i][j]= text.nextInt();
        }
    }


    for (int i=0;i<4;i++)
    {
        if(!text.hasNextInt()) break;
        for (int j=0;j<4;j++)
        {
            if(!text.hasNextInt()) break;
            matrix2[i][j]= text.nextInt();
        }
    }

    for (int i=0;i<4;i++)
        for (int j=0;j<4;j++)
            System.out.println(matrix3[i][j] + matrix3[i][j]);}}

2.虽然我试图从input.in读取并将其写入不同的矩阵,但在执行此代码后,两个矩阵的内容是相同的。

1 个答案:

答案 0 :(得分:0)

Scanner的执行中next对象抛出异常,因此在我看来text已经耗尽了它的输入源。

你应该在text之前控制你有更多的元素,然后再尝试更多的整数,而不是像你那样在外循环,而是在最深层次。

如果你可以在开始循环之前获得一个元素,那么你现在正在加载一串4x4 = 16个元素。

尝试:

for (int i=0;i<4;i++)
{
    if(!text.hasNextInt()) break;
    for (int j=0;j<4;j++)
    {
        if(!text.hasNextInt()) break;
        matrix1[i][j]= text.nextInt();
    }
}