如何将数组的索引打印到单独的ArrayList中

时间:2018-10-17 16:49:26

标签: java arrays arraylist

我为程序创建了一个方法,在其中比较两个数组(用户数组和测试数组)。我试图将数组用户的索引添加到与测试Array不同的ArrayList qMissed中。 如果两个数组完全相同,则应返回null。 我收到异常错误,因为我需要完成引用类型,但是不确定该怎么做。

 /**
 * @param user
 * @param test
 * @return
 */
 public static ArrayList<String> questionMissed(String[] user, String[] test) 
 {   
    ArrayList<int> qMissed = new ArrayList<int>();
    for (int i = 0; i <= user.length-1; i++)
    {
       if (user[i] != test[i])
       {
          qMissed = Arrays.asList(qMissed).indexOf(user);(i+1);
       }
       else if (user[i] == test[i])
       {
          return null; 
       }
    }
    return qMissed;
 }

4 个答案:

答案 0 :(得分:1)

您的方法似乎存在一些逻辑和编译问题。

看起来您需要此方法,

public static List<Integer> questionMissed(String[] user, String[] test) {
    List<Integer> qMissed = new ArrayList<Integer>();

    for (int i = 0; i < user.length; i++) {
        if (!user[i].equals(test[i])) {
            qMissed.add(i);
        }
    }

    return qMissed.size() == 0 ? null : qMissed;
}

修复及其说明,

1. Your return type has to be List<Integer> instead of ArrayList<String> because you want to return an ArrayList of Integer indexes and not string.
2. Second problem you can't use primitive type in ArrayList<int> instead you need to use ArrayList<Integer>
3. You can't compare strings with == instead you need to use equals method on string.
4. You don't have to return null inside forloop else hence else block I have removed.
5. After you exit the forloop, as you want to return null if both element's arrays matched hence this code,

return qMissed.size() == 0 ? null : qMissed;

如果您使用此方法遇到任何问题,请告诉我。

编辑:

在两个传递的数组都具有相同编号的情况下,如何显示“全部正确”消息。您一定会这样称呼它,

List<Integer> list = questionMissed(user,test);
if (list == null) {
    System.out.println("All are correct");
} else {
    // your current code
}

答案 1 :(得分:0)

我看到您的代码有多个问题,首先,因为Andreas说ArrayList无法托管原始类型 因此将其更改为

ArrayList<Integer> qMissed = new ArrayList<Integer>();

我看到的第二个问题是您正在使用==比较字符串,因此比较可能是错误的,因此请使用equals

(user[i].equals(test[i]))

我看到的最后一个错误是代码无法编译,因为这是无效的代码,您能否在注释中给我更多有关此部分要执行的操作的信息

qMissed = Arrays.asList(qMissed).indexOf(user);
(i + 1);

如果您想执行类似Pushpesh Kumar Rajwanshi的操作,则可以使用Java 8流,这样做的结果是使IntStream的长度与用户的长度相同,然后将其过滤为仅包含不相等的项目索引,然后将其添加到qMissed

public static List<Integer> questionMissed(String[] user, String[] test) {
    List<Integer> qMissed = new ArrayList<>();
     IntStream.range(0, user.length)
            .filter(i -> !user[i].equals(test[i]))
            .forEach(qMissed::add);
    return qMissed.size() == 0 ? null : qMissed;
}

答案 2 :(得分:0)

您可以尝试在方法中将返回类型从ArrayList更改为ArrayList:

public static ArrayList<int> questionMissed(String[] user, String[] test) {   
        ArrayList<int> qMissed = new ArrayList<int>();
        for (int i=0;i<=user.length-1;i++) {
            if (user[i] != test[i]) {
                qMissed = Arrays.asList(qMissed).indexOf(user);(i+1);
            } else {
                return null; 
            }
       }
       return qMissed;
    }

如果条件原因是多余的,您还可以删除else。请附上您得到的例外。

答案 3 :(得分:0)

我想你想像下面..

 public static ArrayList<Integer> questionMissed(String[] user, String[] 
        test) {   
    ArrayList<Integer> qMissed = new ArrayList<Integer>();
    int i = 0;
    if(user.length == test.length ) {
        while(i < user.length ){
            if (!(user[i].equals(test[i]))) {
                qMissed.add( i + 1);
            }else {
                return null;
            }
            i++;
        }
        if(user.length > 0 && i == user.length ) {
            return qMissed;
        }
    }
    return null;

    }