我是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读取并将其写入不同的矩阵,但在执行此代码后,两个矩阵的内容是相同的。
答案 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();
}
}