如何从一个数组中减去某些元素(元素)已经在另一个数组中?

时间:2015-01-13 22:39:00

标签: java arrays sorting arraylist java.util.scanner

我有两个不同的数组,它们都包含相同类型的元素。元素从用户输入获得。并且数组可以存储固定大小的元素。

*假设 fisrt one 基本上是一个arrayList,它将用户输入添加到列表中。 第二个 只是一个数组,它也可以从用户输入中获取值。第二个数组的所有元素也包含在第一个数组中,并且该数组的长度小于第一个数组*

现在我要打印一个数组,该数组是 第一个数组 - 第二个数组 的结果。

这是我正在进行的计划。你可以避免这种编码只是为了给我一个理论上的概念。

    package issuetracking;

import java.util.*;

public class IssueTrackingObject {

    ArrayList<String> crIss = new ArrayList<String>();

    Scanner input = new Scanner(System.in);
    boolean crIss_bool;
    int numOfSolvedIss;
    private String[] solvedIss;

    //lets user create some issues and add them into an arrayList
    public void createIssue() {
        System.out.println("Enter 5 issues: ");

        for (int i = 0; i < 5; i++) {
            System.out.println("Issue " + (i + 1 + ": "));
            crIss_bool = crIss.add(input.nextLine());
        }

    }
//Let user mark some issues as solved (which are already in the list that the user has just created)

    public void solvedIssue() {
        System.out.println("How many solved issue you have(Must be less than 5): ");
        numOfSolvedIss = input.nextInt();

        solvedIss = new String[numOfSolvedIss];

        for (int k = 0; k < numOfSolvedIss; k++) {
            System.out.print("Enter solved issue(REMEMBER THAT THE SOLVED ISSUE MUST BE FROM ONE OF THEM YOU ALREADY HAVE CREATED)no. " + (k + 1) + ": ");

            solvedIss[k] = input.next();
        }

    }

    public void printUnsolvedIssue() {
        //print out the elements of createIssue() that doesn't belong to the solvedIssue()

    }

3 个答案:

答案 0 :(得分:0)

您可以使用这样的简单解决方案:

for (String solved : solvediss) {
    if (solved != null) crIss.remove(solved);
}

这将从列表中删除阵列中的所有String

当然,你也可以这样做。

crIss.removeAll(Arrays.asList(solvediss));

答案 1 :(得分:0)

遍历你的第二个数组并使用arraylist中的remove方法从第一个数组中删除第二个数组的每个元素。

 for (int i = 0; i < solvedIss.length; i++) {
            crIss_bool = crIss.remove(solvedIss[i]);
 }

答案 2 :(得分:0)

在这种情况下,删除元素可能是最简单的方法,但它会导致原始列表发生变化。

如果您不希望对原始列表进行任何破坏性修改,可以执行以下简单搜索。

for (String issue : crIss) {
    bool isUnSolved = true;
    for (String solvedIssue : solvedIss) {
        if (issue.equals(solvedIssue)) {
            isUnSolved = false;
            break;
        }
    }
    if (isUnSolved) {
        // Print the 'issue' or do whatever you want to do with it.
    }
}

希望这有帮助。
祝你好运。