2016-01-04 3 views
-4

Я работаю над статическим булевым методом, который проверяет, совпадают ли два соседних объекта, если они одинаковы, возвращает true, else возвращает false.Подсчет массива объектов с помощью статического логического метода JAVA

Вот мой код:

public static boolean neighbor(Object[] arr) { 
    int count = 0; 
    boolean result = true; 
    for(int i = 0; i < arr.length; i++) 
    { 
     if (arr[i].equals(arr[i + 1])) 
     { 
      count++; 
     } 
    } 
    System.out.println(count); 
    return result && (count > 0); 
} 

Однако, когда я проверить его с помощью командной строки, она не работает. Вот Контролирующие коды:

public static void main(String[] args) { 
    if (neighbor(args)) 
     System.out.println("Neighbor s in arguments"); 
    else 
     System.out.println("No neighbors in arguments!"); 
} 

Пожалуйста, скажите мне, где это идет не так.

+0

Можете ли вы добавить команду, которую вы используете для запуска этого? – Totodile

+4

Здесь вы столкнетесь с ArrayIndexOutOfBoundsException, поскольку цикл for продолжается до последнего индекса, но затем вы проверяете arr [i + 1] в последнем цикле, поэтому граница массива будет превышена. Изменение для цикла должно быть 'i

+5

Определить «не работает». NB Вам не нужна переменная 'result'. Вам действительно не нужен «count» переменный eitheer: вы можете просто «вернуть true», если будет найдено равенство; это будет быстрее. – EJP

ответ

2

Условие цикла:

i<arr.length 

неправильно, потому что вы будете иметь ArrayIndexOutOfBoundsException на последний элемент массива

arr[i].equals(arr[i+1]) 

так arr[i+1] не существует.

Затем вы используете пару бесполезных переменных, таких как result.

Если вам не нужно знать количество вхождений я хотел бы использовать это:

public static boolean neighbor(Object[] arr) { 
    for(int i=0;i<arr.length - 1;i++) { 
     if(arr[i].equals(arr[i+1])) { 
      return true; 
     }  
    } 
    return false; 
} 

В противном случае просто использовать счетчик:

public static boolean neighbor(Object[] arr) { 
    int counter = 0; 
    for(int i=0;i<arr.length - 1;i++) { 
     if(arr[i].equals(arr[i+1])) { 
      counter++; 
     }  
    } 
    return counter > 0; 
} 
0

Попробуйте использовать это без переменной result потому что не нужно его использовать:

public static boolean neighbor(Object[] arr) { 
    int count = 0; 

    for(int i = 0; i < arr.length-1; i++){ 
     if (arr[i].equals(arr[i+1])) 
     { 
      count++; 
     } 
    } 
    System.out.println(count); 
    return (count > 0); 
} 
Смежные вопросы