#java
Вопрос:
я написал этот метод , который проверяет , есть ли цифра, содержащаяся внутри номера индекса следующего массива, если есть хотя бы 1 цифра, которая является частью следующего числа, она попадет в счетчик, и если значение счетчика больше 0, оно попадет в переменную «проверка», которая будет равна true.
достаточно иметь 1 индекс, который является ложным, чтобы сделать весь массив ложным. все они должны быть правдой;
например, массив, который является правильным в соответствии с методом, который я построил: int [] arr = {12,527,71,114,49,1902};
это для объяснения метода. теперь о моей проблеме. метод работает только с четными числами, и я не знаю, что может сработать. спасибо всем помощникам!
public static boolean checkSpecialArray(int[] arr)
{
int i = 0;
int j = 0;
int x = 0;
boolean check = true;
int counter = 0;
for (i = 0; i < arr.length; i )// array's length
{String Dig = Integer.toString(arr[i ]);//next array's number
String num = Integer.toString(arr[i]);//first array's number
for (j = 0; j < num.length(); j )// check first array's index number
for (x = 0; x < Dig.length(); x )// check 2nd array's index number
if (Integer.parseInt("" num.charAt(j)) == Integer.parseInt("" Dig.charAt(x)))//checks a digit to another digit
counter ;
if(counter>0)
check = true;
else if(counter==0)
return false;
counter=0;
}
if(check)
return true;
return false;
}
Комментарии:
1. Что он делает с нечетными числами?
2. Примечание: вместо
Integer.parseInt("" num.charAt(j)) == Integer.parseInt("" Dig.charAt(x))
этогоnum.charAt(j) == Dig.charAt(x))
должно быть достаточно, так как вы хотите проверять символы/цифры, а не значения.
Ответ №1:
Я должен был бы догадаться здесь, но я предполагаю, что это источник вашей проблемы:
for (i = 0; i < arr.length; i ) { // array's length
String Dig = Integer.toString(arr[i ]);//next array's number
Здесь вы i
также увеличиваетесь внутри цикла, поэтому он пропускает числа. Вы, вероятно, хотели бы сделать Integer.toString(arr[i 1])
это вместо этого.
Обратите внимание , что i
в основном это то же самое, что i = 1
или i = i 1
, поэтому наличие этого в «следующей» операции вашего цикла (3-я часть конструкции for), а также в теле в основном заставляет тело цикла начинаться с индексов 0, 2, 4 и т. Д. который, похоже, использует только четные индексы.
Кроме того, наличие String num = Integer.toString(arr[i]);
во второй строке в основном использует «следующий» номер, а не первый.
Наконец i < arr.length;
, это вызовет проблемы для массивов нечетной длины, потому что в теле вы попытаетесь получить доступ к несуществующему индексу в конце (из-за этого i
, но даже a i 1
вызовет это).
Зачем вам это нужно (в соответствии с вопросом в вашем комментарии)?
Так как вы пытаетесь сравнить числа по индексам i
, и i 1
вам нужно убедиться, что i
они не «покидают» массив, т. е. максимально допустимым был бы индекс array.length - 2
. Это связано с тем, что индексы основаны на нуле, поэтому последним допустимым индексом для массива будет array.length - 1
(например, 4 в массиве длины 5).
Теперь давайте рассмотрим варианты для условия цикла:
i<arr.length
— это позволилоi
бы ссылаться на последний индекс в массиве и, следовательноarr[i 1]
, было бы за пределами, следовательно, вы получили исключениеi<=arr.length
— это позволилоi
бы еще больше выйти за рамки иarr[i]
уже потерпело бы неудачуi<arr.length-1
— это будет ограничиватьсяi
только ссылками на индексы до предпоследнего (например, индекс 3 в массиве длиной 5) и, следовательноarr[i 1]
, все равно будет находиться в пределах и ссылаться на последний элемент.
Таким образом, вы хотели бы, чтобы цикл выглядел так:
//from first to second-to-last index
for (i = 0; i < arr.length - 1; i ) {
String num = Integer.toString(arr[i]);//first array's number
//also note the lowercase variable name which is more according to the Java code conventions
String dig = Integer.toString(arr[i 1]);//next array's number
В качестве альтернативы вы можете использовать расширенный цикл for, например, такой:
String prev = null;
for( Integer num : arr ) {
//or use Math.abs(num) to also be able to handle negative integers easily
String next = Integer.toString(num);
//only if there was a previous number
if( prev != null ) {
//compare digits/characters here
}
//keep reference to the "current" number in string form to act as previous in the next iteration
prev = next;
}
Комментарии:
1. разве это не одно и то же? i = i 1? и это не будет работать так, как вы предлагали ( i 1 )
2. @avihu24 нет,
i
в основном это то жеi = i 1
самое, что и .3. теперь это вообще не будет работать , исключение в потоке «main» java.lang. Исключение ArrayIndexOutOfBoundsException: 6 в test_2.checkSpecialArray(test_2.java:141) в home.main(home.java:14)
4. @avihu24 да, этого следовало ожидать, так как у вас также есть еще одна ошибка. Посмотрите на обновленный ответ, я уже обращался к этому вопросу.
5. что касается нижнего регистра , я использую только цифры , должен ли я переключаться между строками dig и num ?