#java #arrays #double
Вопрос:
У меня есть два массива, которые имеют двойные значения.
double[] testArray1 = {3.3, 2.7, 6.4, 1.8, 9.5, 1.4, 9.0, 7.0, 6.5, 3.7};
double[] testArray2 = {5.6, 4.7, 2.8, 3.7, 5.8, 2.7, 6.4, 1.8, 9.5,10.2};
Мне нужно сравнить значения, а затем вывести количество различий, а также самую высокую разницу. До сих пор я делал это;
double nDiff = 0;
double BiggestDiff = 0;
double currentDiff = 0;
for (int i = 0; i < testArray1.length; i ){
for (int k = 0; k < testArray1[i].length; k ){
if (testArray1[i][k] != testArray2[i][k]) {
nDiff =;
currentDiff = 0;
if (testArray1[i][k] > testArray2[i][k]) {
nDiff = (testArray1[i][k] - testArray2[i][k]);
}
else {
currentDiff = (testArray2[i][k] - testArray1[i][k]);
}
if (currentDiff > BiggestDiff) {
BiggestDiff = currentDiff;
}
}
}
}
if (nDiff > 0) {
System.out.println("Number of differences was " nDiff);
System.out.println("The biggest difference was " BiggestDiff);
}
во-первых, я получаю ошибку незаконного начала выражения, которая указывает на ; in nDiff =;
. Поэтому я удаляю это только для того, чтобы получить несколько ошибок, сообщающих мне, что double не может быть разыменован и требуется массив, но дважды найден, что заставляет меня думать, что я сделал код совершенно неправильно.
Заранее спасибо.
Комментарии:
1. Как насчет
nDiff = 1;
или простоnDiff ;
? И зарезервируйте строки, начинающиеся с заглавной буквы для имен классов, в то время как экземпляры этого класса начинаются со строчной буквы в соответствии с соглашением java.
Ответ №1:
- Прежде всего:
for (int k = 0; k < testArray1[i].length; k ){
это неправильно. Когда вы вызываете testArray1[i], он возвращает двойное число, а не массив, вы не можете получить свойство длины одного двойного числа. - Далее:
testArray1[i][k] != testArray2[i][k]
эти массивы не являются матрицами, поэтому у вас не может быть двойных скобок, таких как [] [], если вы хотите взять элемент из массива, это должен быть просто testArray[i]. - nDiff = ; плюс что? Вы должны поставить здесь что-то после = как
nDiff = k;
- Вы хотите сравнить 1-й элемент с 1-м элементом, 2х2, 3х3 и т.д.? Или каждый элемент из первого массива с каждым элементом из второго массива?
Если каждый x каждый, то ваш код должен быть таким:
double[] testArray1 = {3.3, 2.7, 6.4, 1.8, 9.5, 1.4, 9.0, 7.0, 6.5, 3.7};
double[] testArray2 = {5.6, 4.7, 2.8, 3.7, 5.8, 2.7, 6.4, 1.8, 9.5, 10.2};
double biggestDifference = 0;
double differenceCounter = 0;
double currentDifference;
double firstArrayValue;
double secondArrayValue;
for (int i = 0; i < testArray1.length; i ){
for (int k = 0; k < testArray1.length; k ){
firstArrayValue = testArray1[i];
secondArrayValue = testArray2[k];
if (firstArrayValue != secondArrayValue) {
differenceCounter = 1;
currentDifference = Math.abs(firstArrayValue - secondArrayValue);
if (currentDifference > biggestDifference) {
biggestDifference = currentDifference;
}
}
}
}
if (differenceCounter > 0) {
System.out.println("Number of differences was " differenceCounter);
System.out.println("The biggest difference was " biggestDifference);
}
Затем он напечатает:
Number of differences was 95.0
The biggest difference was 8.799999999999999
Если вы хотите сравнить 1v1, 2v2, 3v3 и т.д. вы можете предположить, что оба массива имеют одинаковую длину, тогда вам следует использовать один индекс, например:
double[] testArray1 = {3.3, 2.7, 6.4, 1.8, 9.5, 1.4, 9.0, 7.0, 6.5, 3.7};
double[] testArray2 = {5.6, 4.7, 2.8, 3.7, 5.8, 2.7, 6.4, 1.8, 9.5, 10.2};
double biggestDifference = 0;
double differenceCounter = 0;
double currentDifference;
double firstArrayValue;
double secondArrayValue;
if (testArray1.length == testArray2.length) {
for (int i = 0; i < testArray1.length; i ) {
firstArrayValue = testArray1[i];
secondArrayValue = testArray2[i];
if (firstArrayValue != secondArrayValue) {
differenceCounter = 1;
currentDifference = Math.abs(firstArrayValue - secondArrayValue);
if (currentDifference > biggestDifference) {
biggestDifference = currentDifference;
}
}
}
if (differenceCounter > 0) {
System.out.println("Number of differences was " differenceCounter);
System.out.println("The biggest difference was " biggestDifference);
}
} else {
throw new IllegalArgumentException("Sorry, arrays have different length :(");
}
Затем он напечатает:
Number of differences was 10.0
The biggest difference was 6.499999999999999
Вы должны использовать обычную среду разработки, такую как InteliJ или Eclipse, она покажет вам ошибки во время компиляции. Ваше здоровье.
Комментарии:
1. Счетчик различий не должен быть двойным, так как количество различий подразумевает, что это положительное не дробное значение. Таким образом, должно использоваться int. Следующий вопрос заключается в том, ожидает ли учитель, что его заказ будет релевантным или нет. Если порядок не имеет значения, массивы можно отсортировать, чем больше разница, тем больше разница между первым и последним элементом массивов to. И в двух массивах есть 5 разных значений. Кроме того, поскольку значения имеют одну дробную цифру, разница должна быть сформирована аналогом, чтобы она была напечатана как 6,5
2. Да, вы правы, там должно быть int.