Булев метод с гнездом сравнения для массива, как исправить - PullRequest
0 голосов
/ 21 сентября 2018

Итак, у меня есть задание для создания логического метода, который возвращает true или false, если в заданном массиве целых чисел есть дублированное целое число.проблема в том, что единственный способ проверить - это взять каждый элемент и сравнить его с остальными, что-то вроде вставки.проблема в том, что он не может прочитать мою переменную результата, говоря, что она не инициирована. Вот код:

public static boolean hasDuplicate(int numOfElement, int[] numArr)
    {
    int numOfElements = numOfElement;
    int[] uncheckedArr = numArr;
    boolean result;

    for( int i = 0 ; i < numOfElement; i++) // takes an element in order from left to right
    {
        for(int j = i + 1; j < numOfElement; j++)
        {
            if (numArr[i] == numArr[j])
                result = true;
        }


    }
    return result;
}

Мой вопрос: как я могу это исправить?Я хочу, чтобы он также остановился, как только он обнаружит дубликат в массиве.Однако я знаю, что функция прерывания делает только самый внутренний цикл.Это всего лишь небольшой макет, так как я постоянно менял код.Я пытался найти этот материал в Интернете, но, похоже, не могу найти решение

Ответы [ 3 ]

0 голосов
/ 21 сентября 2018

Возможно, попробуйте что-то вроде этого:

public static boolean hasDuplicate(int numOfElement, int[] numArr) {
    boolean found = false;
    int i = 0;
    while (!found && i < numOfElement) {
        int j = i + 1;
        while (!found && j < numOfElement) {
            if (numArr[i] == numArr[j]) {
                found = true;
            }
        }
    }
    return found;
}

Пожалуйста, проверьте код на вашем компьютере :) Я не могу выполнить его со своего телефона :) Я пытаюсь сосредоточиться на том, чтобы немного изменить ваш код, особенно условия остановки цикла.

0 голосов
/ 21 сентября 2018

Просто идея с Java 8 Stream.

//ofcourse you can remove numOfElement from method signature. i didnt use.
public static boolean hasDuplicate(int numOfElement, int[] numArr) {

    List<Integer> numArrList = Arrays.stream(numArr).boxed().collect(Collectors.toList());
    return new HashSet<Integer>(numArrList).size() != numArrList.size();
}
0 голосов
/ 21 сентября 2018

Вы должны инициализировать вашу логическую переменную как false

boolean result = false;

Также вы можете использовать полученные переменные в качестве параметра, поэтому эти строки бесполезны

int numOfElements = numOfElement;
int[] uncheckedArr = numArr;

Вы можете написатьваш код так:

public static boolean hasDuplicate(int[] numArr)
{  //Note that you dont need to pass numOfElements as a parameter!
   int numOfElements = numArr.length; 
   boolean result = false;

   for(int i=0;i<numOfElements;i++)
   {
       for(int j=i+1;j<numOfElements;j++)
       {
          if (numArr[i] == numArr[j])
          {
             result = true;
             return result; //You can just return true here, since you wanted to break the loops once you find duplicates
          }
       }
   }
   return result;
}
...