java - 为什么我的字符串没有改变?

标签 java

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/

相关文章:

java - 在 Firestore 中仅运行 onAdd 监听器

java - Json POST 请求数据无法到达 Play Framework 2 中的服务器

JavaFX 制作自定义组件的可滚动列表

java - 握手失败/没有共同的密码套件 - SymmetricDS 3.1.5

java - List<Dog> 是 List<Animal> 的子类吗?为什么 Java 泛型不是隐式多态的?

java - :event triggered inside a h:panelGroup with rendered=false

java - JPanel - 用新的较小图像替换当前显示的图像时出现问题

java - 仅加载类

java - Tomcat 将 'stderr' 内容重定向到 'stdout'

java - java语言如何将字符串解析成hashmap