public static void read(String a[], double b[], String c) throws IOException {
Scanner in = new Scanner(new File("data.txt"));
while (in.hasNext()) {
int i = 0;
String id = in.next();
String name = in.next();
String lastname = in.next();
double grade = in.nextDouble();
if (name.substring(0, 2).equalsIgnoreCase(c)) {
a[i] = id + "\t" + name + "\t" + lastname + "\t" + grade;
b[i] = grade;
}
i++;
}
}
当我使用此方法时
String men[] = new String[501];
double menGrade[] = new double[501];
read(men, menGrade, "MR");
我的 men[0] 被分配了一个字符串,但 men[1] 到 men [500] 都是 null ...
最佳答案
您需要在 while 循环之外声明变量 i
以保持其递增。
现在你是
- 声明其值为 0
- 将值分配给第一个数组位置
- 增加 i,然后
- 在下一次循环迭代时使用值 0 再次声明它。
所以,只需更改您的行:
while (in.hasNext()) {
int i = 0;
到
int i = 0;
while (in.hasNext()) {
您的代码还存在其他问题,您应该以某种方式解决这些问题。 我不知道为什么您用固定大小 500 初始化数组,并且在将人员和成绩添加到这些数组之前还要检查一些条件。但是,如果您不小心,这会导致一些问题。
现在,每当 if 条件计算结果不为 true 时,数组中就会出现漏洞。
如果文件中的条目超过 500 个,您的程序也会崩溃。
处理动态数据结构时(因此,当您事先不知道到底有多少条记录时),一个相当好的解决方案是使用动态数据结构。
在java中,您可以查看java.util.List
接口(interface),并且可能java.util.ArrayList
作为一个很好的实现。
这也是该类的 java 文档:Java Doc
在这里您可以找到有关集合 api 的更多信息,这对于动态数据结构来说是一件好事:Collections - List tutorial
关于java - 为什么我的字符串没有改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20419698/