Java 带有比较嵌套循环的布尔方法,用于数组如何修复

Java 带有比较嵌套循环的布尔方法,用于数组如何修复,java,for-loop,if-statement,boolean,Java,For Loop,If Statement,Boolean,所以我有一个赋值来创建一个布尔方法,如果给定的整数数组中有一个重复的整数,该方法将返回true或false。问题是检查的唯一方法是将每个元素与其他元素进行比较,有点像插入排序。 问题是它无法读取我的结果变量,说它没有启动 代码如下: public static boolean hasDuplicate(int numOfElement, int[] numArr) { int numOfElements = numOfElement; int[] uncheckedArr

所以我有一个赋值来创建一个布尔方法,如果给定的整数数组中有一个重复的整数,该方法将返回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;
}
公共静态布尔hasdeplicate(int numOfElement,int[]numar)
{
int numOfElements=numOfElement;
int[]不勾选=numar;
布尔结果;
for(int i=0;i

我的问题是如何解决这个问题?我想让它在阵列中检测到重复时也停止。然而,我知道break函数只执行最内部的循环。这只是一个很小的布局,因为我经常修改代码。我确实尝试在网上查找这些内容,但似乎找不到解决方案

您应该将布尔变量初始化为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;
}
public静态布尔hasdeplicate(int[]numar)
{//注意,您不需要将numOfElements作为参数传递!
int numOfElements=nummarr.length;
布尔结果=假;

对于(int i=0;i可以尝试这样的方法:

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;
}
公共静态布尔hasdeplicate(int numOfElement,int[]numar){
布尔值=false;
int i=0;
而(!found&&i

请检查您计算机上的代码:)我无法从手机上执行:)我想重点关注的是更改您的代码,尤其是循环停止条件。

只是一个关于
Java8流的想法。

//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();
}
//当然可以从方法签名中删除numOfElement。我没有使用。
公共静态布尔hasdeplicate(int numOfElement,int[]nummarr){
List numArrList=Arrays.stream(numArr.boxed().collect(Collectors.toList());
返回新的HashSet(numArrList.size()!=numArrList.size();
}

if(numArr[i]==numArr[j]){return true;}
并完全去除
结果
,并在方法末尾
返回false;
。此外,如果有足够的内存,这可以通过使用
Set
或Stream unique在单个循环中完成,并将大小与原始数组进行比较(这可能是下一个赋值)。您还可以删除:
int-numOfElements=numOfElement;
int[]取消选中Darr=numArr;
此外,您可以将
found=true;
替换为
return-true
,将
return-found
替换为
return-false;
@Gianlucca,因此j++现在是一个死代码,现在的问题是,如果我不在那里使用return,它将不会破坏嵌套循环,但如果我在那里使用了for循环,它将不会破坏嵌套循环run@Gianlucca我终于让它工作了,我不得不接受marchin的while循环的想法,我确实改变了一些东西,因为我一直在搞乱它,在尝试了10次之后,它工作了