簡體   English   中英

在 arrays 之間找到相似的值

[英]Finding similar values between arrays

我想編寫一個簡單的程序,它可以接受 x 數量的輸入,將它們放入一個數組中,在不同的數組中再次執行相同的操作,然后檢查兩個列表中出現了哪些輸入。

為了獲得輸入,我想不出一種方法讓它繼續接受任意數量的輸入,並且只有在輸入說“停止”或“結束”或類似的東西時才停止。

我是一個自學成才的初學者,所以請原諒我對這些東西的無知。

我還沒有設置第二個數組,但知道如何設置(我很確定)。 我只是停留在輸入問題以及如何比較輸入

//input of codes
    System.out.println("How many codes do you wanna put in?");
    x = input.nextInt();
    int[] binList = new int[x];
    System.out.println("Okay. Enter your codes:");
    for (int n = 0; n < x; n++) {
        binList[n] = input.nextInt();
    }

    //sort codes
    Arrays.sort(binList);

    //display codes
    System.out.println("Here are your codes:");
    for (int n = 0; n < x; n++) {
        System.out.println(binList[n]);

你可以這樣做:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // get first list elements
        List<Integer> list1 = getCodes(sc);
        // get second list elements
        List<Integer> list2 = getCodes(sc);

        sc.close();

        // display common codes
        System.out.println("Common elements are: ");
        list1.retainAll(list2);
        for (Integer code : list1) {
            System.out.println(code);
        }
    }

    /**
     * Reads input from console.
     * 
     * @param sc
     * @return
     */
    private static List<Integer> getCodes(Scanner sc) {
        System.out.println("How many codes do you wanna put in?");
        int n = sc.nextInt();
        List<Integer> list = new ArrayList<>();
        System.out.println("Okay. Enter your codes:");
        for (int i = 0; i < n; i++) {
            list.add(sc.nextInt());
        }
        return list;
    }
}

這是一個答案,顯示了如何使用Set找到類似的數組元素。 它從兩個int arrays 開始,將值放入兩個不同的Set collections,然后遍歷一組(不管哪一組——我的示例是遍歷setOne )尋找兩組中存在的項目,最后跟蹤在名為itemsInBothSets的新第三組中匹配。

int[] one = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] two = new int[]{2, 4, 6, 8, 10};

Set<Integer> setOne = new HashSet<>();
for (int i : one) {
    setOne.add(i);
}

Set<Integer> setTwo = new HashSet<>();
for (int i : two) {
    setTwo.add(i);
}

Set<Integer> itemsInBothSets = new HashSet<>();
for (Integer integer : setOne) {
    if (setTwo.contains(integer)) {
        itemsInBothSets.add(integer);
    }
}

System.out.println(itemsInBothSets.toString());

當我在本地運行時,這是 output:

[2, 4, 6, 8, 10]

對於輸入參與:

繼續接受任意數量的輸入,並且僅在輸入說“停止”或“結束”或類似內容時停止

對於您的情況,最好使用arraylist而不是array ,因為您正在輸入x (未知)數量的項目。 以下程序從用戶那里獲取輸入,直到輸入-1

ArrayList<Integer> binList = new ArrayList<>();
System.out.println("Enter your codes:");
while (true) {
    x = input.nextInt();
    if (x == -1) break;
    binList.add(x);
}

對比部分:

我假設您已經創建了兩個binListbinList2 我還假設您已經輸入了上述兩個數組列表中可變數量的項目。 現在比較它們,使用以下代碼:

for (int i = 0; i < binList.size(); i++) {
    for (int j = 0; j < binList2.size(); j++) {
        if(binList.get(i) == binList2.get(j)) {
            System.out.print(binList.get(i) + " ");
        }
    }
}

請注意, size()方法返回 arraylist 的大小。 這是上述代碼的示例輸入和 output:

樣本輸入:

Enter your codes:

1 2 3 4 -1

Enter your codes:

2 4 5 7 9 -1

樣品 output:

2 4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM