Я пишу базовую программу для сравнения данных в двух массивах. Порядок не имеет значения и не повторяется. В настоящее время вывод показывает, что данные массива одинаковы. Это не то, что я хочу, так как данные массива разные. Это код, который у меня есть прямо сейчас:
public class Algorithm1{
public static void main (String[] args){
int[] array1 = {1, 2, 3};
int[] array2 = {1, 2, 3, 4, 5, 6};
int matchCount = 0;
boolean match = false;
for(int j = 0; j < array1.length;j++) {
for(int i = 0; i < array2.length;i++){
if(array1[j] == array2[i])
matchCount++;
}
}
if(matchCount >= array1.length && matchCount >= array2.length)
match = true;
if(match = true){
System.out.println("The data in the arrays is the same.");
}
else if(match = false){
System.out.println("The data in the arrays is different.");
}
}
}
Просто замените if(match = true)
на if(match == true)
или, даже проще, if(match)
, и с вами все будет в порядке;)
Вы написали:
if(match = true) {
System.out.println("The data in the arrays is the same.");
}
Это if(match = true)
самом деле:
match
true
true
... и вводит if
:) В качестве дополнительной заметки я хотел бы указать, что вам не нужно указывать if (match == false) в вашем предложении else
... потому что если мы введем это else
, это уже означает, что match != true
(т.е.: match == false
).
Ура!
Попробуйте этот код и сообщите мне, если вам нужно больше объяснений, если это то, что вам нужно
O (nlogn), если вы заинтересованы :), если вы используете хеш или набор.. это будет O (n), но более высокая сложность пространства
import java.io.*;
import java.util.Arrays;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
int[] array1 = {1, 2, 3, 6, 5, 4, 3};
int[] array2 = {1, 2, 3, 4, 5, 6, 4, 4,6};
java.util.Arrays.sort(array1);
java.util.Arrays.sort(array2);
boolean match = true;
int ptr1 = 0;
int ptr2 = 0;
while(ptr1<array1.length && ptr2<array2.length && array1[ptr1]==array2[ptr2])
{
ptr1++;ptr2++;
while(ptr1<array1.length && array1[ptr1]==array1[ptr1-1])
{
ptr1++;
}
while(ptr2<array2.length && array2[ptr2]==array2[ptr2-1])
{
ptr2++;
}
}
if((ptr1 == array1.length) && (ptr2 == array2.length))
System.out.println("The data in the arrays is the same");
else
System.out.println("The data in the arrays is the different");
}
}
Это довольно простая ошибка, которую делают многие программисты. При сравнении двух объектов вы используете ==
и при настройке вы используете =
Вместо:
if(match = true){
System.out.println("The data in the arrays is the same.");
}
else if(match = false){
System.out.println("The data in the arrays is different.");
}
Должно быть:
if(match == true){
System.out.println("The data in the arrays is the same.");
}
else if(match == false){
System.out.println("The data in the arrays is different.");
}
Ну, в действительности, это очень избыточно. Высказывание if(match == true)
- это то же самое, что просто сказать if(match)
и независимо от того, что в else
части, если совпадение неверно, тогда оно должно быть ложным, поэтому говорить else if(match == false)
непрозрачно. Вам нужно только сказать else
.
Вот что должно быть с изменениями, которые я сделал:
if(match){
System.out.println("The data in the arrays is the same.");
}
else{
System.out.println("The data in the arrays is different.");
}
Существует подход, который вы можете использовать в библиотеке. Collections.indexOfSubList (источник списка, целевой список)
public int findArray(Integer[] arg1, Integer[] arg2)
{
return Collections.indexOfSubList(Arrays.asList(arg1), Arrays.asList(arg2));
}