[英]Make java check array equal
我對編寫代碼還很陌生,我得到了一個 Java 任務來編寫一個具有兩個相同大小的 arrays 的程序,並且用戶正在向其中輸入值。 然后程序運行並檢查 arrays 是否具有相同的值。 例如:array1 {1,2,3,4,5} 和 array2 {3,2,5,4,1} 被認為是相等的。 但是如果第二個數組有不同的數字(array2 {3,2,6,4,1}),則認為它們不相等。 當兩個 arrays 相等但值不在同一個索引中時,應將第二個數組更改為右側的索引。
希望我明白,無論如何我都寫了代碼,但我真的很困惑。
import java.util.Scanner;
public class Exe_3_sameOrNot {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
final int ARR_SIZE = 5;
int num1, num2;
int i, j, k;
int[] firstArr = new int[ARR_SIZE];
int[] secArr = new int[ARR_SIZE];
for (i = 0; i < firstArr.length; i++) {
System.out.print("Enter first 5 numbers ");
firstArr[i] = input.nextInt();
}
for (i = 0; i < secArr.length; i++) {
System.out.print("Enter sec 5 numbers ");
secArr[i] = input.nextInt();
}
int len = firstArr.length;
for (j = 0; j < len; j++) {
if (firstArr[j] == secArr[j]) {
System.out.print(firstArr[j] + "\n" + secArr[j]);
} else {
for (k = 0; k < len; k++) {
if (k == len) {
k = k * 0;
}
secArr[k] = secArr[k + 1];
}
System.out.print(secArr[k]);
}
}
input.close();
}
}
如果 arrays 的長度相等,則“天真的”實現將使用嵌套循環將array1
中的每個元素與array2
的每個元素進行比較:
static boolean arraysEqual(int[] a1, int[] a2) {
if (a1.length != a2.length) { // different lengths, could not be "equal"
return false;
}
for (int i = 0, n = a1.length; i < n; i++) {
boolean found = false;
for (int j = 0; j < n && !found; j++) {
if (a1[i] == a2[j]) {
found = true;
}
}
if (!found) { // missing element detected
return false;
}
}
return true;
}
但是,當輸入數組中沒有重復項時,此解決方案效果很好。 也就是說,對於下面的輸入,結果將是true
:
int[] a3 = {4, 3, 2, 2, 2};
int[] a4 = {3, 3, 2, 4, 2};
如果需要確保兩個 arrays 包含相同數量的不同元素,最好對輸入 arrays 進行排序並檢查所有排序后的元素是否相等:
static boolean arraysEqual2(int[] a1, int[] a2) {
if (a1.length != a2.length) {
return false;
}
Arrays.sort(a1);
Arrays.sort(a2);
for (int i = 0; i < a1.length; i++) {
if (a1[i] != a2[i]) {
return false;
}
}
return true;
}
測試:
public static void main(String args[]) {
int[] a1 = {1, 2, 3, 4, 5};
int[] a2 = {4, 3, 2, 1, 5};
int[] a3 = {4, 3, 2, 2, 2};
int[] a4 = {3, 2, 3, 4, 2};
int[] a5 = {3, 2, 4, 3, 2};
System.out.println(Arrays.toString(a1) + " EQ " + Arrays.toString(a2) + "? nested: " + arraysEqual(a1, a2) + "; sorted: " + arraysEqual2(a1, a2));
System.out.println(Arrays.toString(a1) + " EQ " + Arrays.toString(a3) + "? nested: " + arraysEqual(a1, a3) + "; sorted: " + arraysEqual2(a1, a3));
System.out.println(Arrays.toString(a2) + " EQ " + Arrays.toString(a3) + "? nested: " + arraysEqual(a2, a3) + "; sorted: " + arraysEqual2(a2, a3));
System.out.println(Arrays.toString(a2) + " EQ " + Arrays.toString(a4) + "? nested: " + arraysEqual(a2, a4) + "; sorted: " + arraysEqual2(a2, a4));
System.out.println(Arrays.toString(a3) + " EQ " + Arrays.toString(a4) + "? nested: " + arraysEqual(a3, a4) + "; sorted: " + arraysEqual2(a3, a4));
System.out.println(Arrays.toString(a5) + " EQ " + Arrays.toString(a4) + "? nested: " + arraysEqual(a5, a4) + "; sorted: " + arraysEqual2(a5, a4));
}
Output:
[1, 2, 3, 4, 5] EQ [4, 3, 2, 1, 5]? nested: true; sorted: true
[1, 2, 3, 4, 5] EQ [4, 3, 2, 2, 2]? nested: false; sorted: false
[1, 2, 3, 4, 5] EQ [2, 2, 2, 3, 4]? nested: false; sorted: false
[1, 2, 3, 4, 5] EQ [3, 2, 3, 4, 2]? nested: false; sorted: false
[2, 2, 2, 3, 4] EQ [2, 2, 3, 3, 4]? nested: true; sorted: false
[3, 2, 4, 3, 2] EQ [2, 2, 3, 3, 4]? nested: true; sorted: true
lambda 短而甜
b1 和 b2 是 arrays a1 和 a2 排序:
int[] b1 = Arrays.stream( a1 ).sorted().toArray();
int[] b2 = Arrays.stream( a2 ).sorted().toArray();
檢查兩個 arrays 的長度是否相同,並且兩個 arrays 上對應位置的所有數字是否相等:
System.out.println( "is equal: "
+ ((b1.length == b2.length) && IntStream.range( 0, b1.length )
.allMatch( i -> b1[i] == b2[i] ) ));
而已
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.