0
int x = 0;
String[] QEquivalent = {};

String s = sc.nextLine();
String[] question2 = s.split(" ");

for (int i = 0; i < question2.length; i++) {
    System.out.println(question2[i]);
    x++;
}                                                                   //debug
System.out.println(x);

String s2 = sc2.nextLine();
String[] Answer = s2.split(" ");

for (int c = 0; c < Answer.length; c++) {
    System.out.println(Answer[c]);
}                                                                   //debug
int y;

String u = sn.nextLine();
String[] t = u.split(" ");
for (y = 0; y < question2.length; y++) {
    for (int w = 0; w < t.length; w++) {
        if (t[w].equals(question2[y])) {
            QEquivalent[y] = "ADJ";
            System.out.println(QEquivalent[y]);
            break;
        }
    }
}

这是我现在拥有的代码行。当在 String[] t 中找到有问题的字符串时,它应该将字符串“ADJ”存储在 String[] QEquivalent 中。我似乎无法修复错误。有人可以帮帮我吗?

4

7 回答 7

3

您在这里创建一个空数组:

String[] QEquivalent = {};

因此,您尝试访问的任何索引都将超出范围。您应该使用固定大小创建一个数组。

或者,您可以更好地使用 an ArrayList,它可以动态增长大小:

List<String> qEquivalent = new ArrayList<String>();

然后使用以下方法添加元素:

qEquivalent.add("ADJ");

请遵循 Java 命名约定。变量名应以小写字母开头。

于 2013-07-31T15:17:40.593 回答
1

您的数组QEquivalent是一个空数组。它是有长度的0,因此甚至QEquivalent[0]会抛出ArrayIndexOutOfBoundsException

我可以看到的一个解决方法是为其分配一个长度:

String[] question2 = s.split(" ");
// Just assign the dimension till which you will iterate finally
// from your code `y < question2.length` it seems it should be question2.length
// Note you are always indexing the array using the outer loop counter  y 
// So even if there are n number of nested loops , assigning the question2.length
// as dimension will work fine , unless there is something subtle you missed 
// in your code
String[] QEquivalent = new String[question2.length];

更好地使用任何实现List,例如ArrayList.

List<String> qEquivalent = new ArrayList<String>();
......
if (t[w].equals(question2[y])) {
       qEquivalent.add("ADJ");
       System.out.println(qEquivalent.get(y));
       break;
}
于 2013-07-31T15:18:07.027 回答
1

您创建一个空数组:

String[] QEquivalent = {};

然后在 index 处设置一些元素y > 0

QEquivalent[y] = "ADJ";

您可以:

  • 计算数组的最终维度并确保实例化它:String[] QEquivalent = new String[SIZE];
  • 使用动态结构,如ArrayList

例如:

ArrayList<String> QEquivalent = new ArrayList<QEquivalent>(); 
QEquivalent.add("ADJ");
于 2013-07-31T15:19:25.263 回答
0

给数组一些大小String[] QEquivalent = new String[100];

您的语句String[] QEquivalent = {};创建一个大小为零的数组。

于 2013-07-31T15:18:50.197 回答
0

您将您的声明QEquivalent array为空String array

当您访问 indexQEquivalent[y]时,该索引不存在,因此ArrayIndexOutOfBoundsException.

我强烈建议您改用 a List<String>

如:

List<String> qEquivalent = new ArrayList<String>(); // replaces the array declaration and uses Java conventional naming

...

qEquivalent.add("ADJ"); // replaces the indexing of the array and adds the item
于 2013-07-31T15:21:06.913 回答
0

可能是 QEquivalent 变量会出错。因为当您声明该变量时,它的长度为 0。所以将变量声明为 withnew和一个大小。

于 2013-07-31T15:21:39.137 回答
0

或者在将字符串拆分为 question2 后移动它并使用:

String[] QEquivalent = new String[question2.length];
于 2013-07-31T15:21:45.713 回答