gpt4 book ai didi

java - StringTokenizer NoSuchElements

转载 作者:行者123 更新时间:2023-12-02 13:34:02 26 4
gpt4 key购买 nike

我创建了一个读取这样的文件集的方法(//...是注释,忽略它们):

5 // n jobs 
2 // n tools
1 4 5 6 2
1 5 4 2 3

矩阵代表每项工作使用的工具,但在这里并不重要。

方法如下:

public static JobS inputJobMatrix(){
String line = ""; // Line in tokenizer
int jobN = inputJobN(); //First number of the file (jobs) works
int toolN = inputToolN(); //Second number of the file (tools) works
//Instancing JobS object
JobS inputJobS = new JobS(jobN, toolN);
int[][] tabFill = new int[jobN][toolN];
int[] tabFillOrder = new int[jobN];
try {
// Initializing reader.
FileReader fr = new FileReader("input.txt");
BufferedReader br = new BufferedReader(fr);
StringTokenizer st = new StringTokenizer(line);
for(int i=0; i<3; i++){ //ReachFirstLine of matrix
line = br.readLine();
//System.out.println(line);
}
//Instancing tab for Job Order 1...n
int[] a = new int[jobN];
for (int i=0; i<jobN; i++){
a[i]=i+1;
}
//Filling Order tab with Job order
JobS.fillLine(tabFillOrder, a, 0); //Fills the tab with the tab a (make a copy of it we could say)
//Reading the matrix line by line and filling tab line
for(int i=0; i<jobN; i++){
for(int j=0; j<toolN; j++){
String str = st.nextToken();
System.out.println(str);
tabFill[i][j] = Integer.parseInt(str);
}
line = br.readLine();
}
inputJobS.setJobS(tabFill);
br.close();

} catch (IOException e) {
System.out.println("File not found exception in inputJobMatrix.");
}
return inputJobS;

}

结果是:

Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(Unknown Source)
at pProgra.ReadJobS.inputJobMatrix(ReadJobS.java:84)
at pProgra.PPMain.main(PPMain.java:14)

我尝试在循环中查找问题,但没有找到任何问题,而且我不明白为什么它不起作用。这里的目标是用输入文件的矩阵填充一个二维 int 数组(例如我之前用作业和工具给出的那个),并将该数组用于我的对象(JobS,我也会在这里给出构造函数如果有帮助):

public class JobS {
private int[] jobOrder;
private int[][] jobS;

public JobS(int jobs, int tools){// Creates one more line for the title (jobOrder).
super();
int[][] tab = new int[jobs][tools];
int[] tab2 = new int[jobs];
this.jobS = tab;
this.jobOrder = tab2;
}

我最后使用的 setter :

public void setJobS(int[][] jobS) {
this.jobS = jobS;
}

我尝试通过注释尽可能详细地描述代码,希望您能理解我想要做什么。

这是我第一次尝试做一个“复杂”的应用程序,所以也许我只是愚蠢,忘记了一些东西,但现在我已经搜索了一个小时,仍然不知道是什么原因造成的..

希望您能帮忙,先谢谢了!LL.

最佳答案

如您所见,字符串为空:

 String line = ""; // Line in tokenizer

所以这里的st是空的:

StringTokenizer st = new StringTokenizer(line);

因此,当您调用此方法时:

String str = st.nextToken();

发生异常。

通过在 for 循环之后实例化 StringTokenizer,确保 首先具有一些数据。

示例

更改此:

StringTokenizer st = new StringTokenizer(line);
for(int i=0; i<3; i++){ //ReachFirstLine of matrix
line = br.readLine();
//System.out.println(line);
}

对此:

for(int i=0; i<3; i++){ //ReachFirstLine of matrix
line = br.readLine();
//System.out.println(line);
}
StringTokenizer st = new StringTokenizer(line);

旁注 - 此代码:

line = br.readLine();

将在循环内的每次迭代时覆盖line的值,这可能是您想要的,但如果您想附加所有文本行,请使用readLine() 得到然后你可以这样做:

line += br.readLine();

关于java - StringTokenizer NoSuchElements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43104032/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com