数组中的数组:迭代无法识别其中的字符串

Array inside an array: iteration doesn't recognize strings inside of it

我无法读取二维数组中的元素。

为了语境化,用户提供这样的输入:

7  
1
2
3 1 2
4 3
5 4
6 3
7 5 6

其中第一个数字是下一个输入的数量(在我的代码中为 n)。接下来的每个第一个数字都是一门课程,后面的数字是它的要求(也是课程)。例如,课程 3 需要课程 1 和 2 获得批准。

我需要计算一个字符串在二维数组中出现的次数,但不考虑每个数组的第一个元素 (list1[i][0])。此外,第一行 list1[0] 未填充以使索引调用更容易(这就是为什么我的函数以 i=1 开头)。 问题是它无法识别二维数组中的项目,因此计数 returns 始终为 0。这是我的函数

static int count(String[][] list, String s, int n) { //n is the number of rows
    int x=0;
    for (int i=1;i<=n;i++) {
        for (int j=1;j<list[i].length;j++) {
            if (list[i][j]==s) {
                x++;
            }
        }
    }
    return x;
}

该函数实际上适用于这样定义的数组:

String[][] list1= {{null},{"1"},{"2"},{"3","1","2"},{"4","3"},{"5","4"},{"6","3"},{"7","5","6"}};

其中,例如,count(list1,"1",7) returns 1 和 count(list1, "3",7) returns 2.

但是对于将输入保存为字符串的数组 (list2),据说就像 list1 一样,计数 returns 0.

我初始化二维数组list2的方式:

 String[][] list2 = new String[n+1][];
    String[] L1 = new String[n+1]; //just an auxiliary array
    for (int j=1; j<=n; j++) {
                list2[j] = new String[n+1];
                L1[j] = sc.nextLine();
                list2[j] = L1[j].split(" ");
            }

奇怪的是,如果调用数组或 list2 的元素,它 returns 应该是什么(例如,使用上面的输入,list2[3]=["3", "1","2"]) 但该功能不起作用。 我在另一个作业中遇到了同样的问题,它涉及到将数组添加到另一个数组,我无法解决它所以我改变了输入的保存方式,但现在由于限制我没有其他选择.

任何帮助将不胜感激

尝试使用 .equals() 将矩阵中的值与字符串 s 进行比较,而不是 == 运算符

2 个问题:

1:数组是从 0 开始索引的。从 0 开始循环,而不是 1
2:使用.equals()比较字符串。 切勿对对象使用==,除非您确切地知道自己在做什么

At Java == 表示完全相同的对象进行对象比较。对于 String 对象,有方法 equals,覆盖对象 class equals() 方法实现。

equals 方法 returns 如果对象是一个字符串,则为真,而不是 null 并且表示相同的字符序列。

static int count(String[][] list, String s, int n) { //n is the number of rows
    int x=0;
    for (int i=1;i<=n;i++) {
        for (int j=1;j<list[i].length;j++) {
            if (list[i][j].equals(s)) {
                x++;
            }
        }
    }
    return x;
}

如果相等不区分大小写使用if (list[i][j].equalsIgnoreCase(s))