Java 如果存在另一个匹配的数字(相同的两个),如何更改数组中的数字

Java 如果存在另一个匹配的数字(相同的两个),如何更改数组中的数字,java,while-loop,Java,While Loop,Im使用while循环检查数组中是否有匹配的数字。但是,如果有,循环似乎会变得无止境,并且不会停止运行 我对java非常陌生,所以我没有尝试过很多东西,因为我不知道什么能用,什么不能用。 我相信问题出在费勒雷或斯吉卡雷。 注意:我是挪威人,所以很多我可以自己命名的东西(变量?)都是挪威语的,但我想任何人都能理解 import java.text.DecimalFormat; import static javax.swing.JOptionPane.*; class UnikeTall{

Im使用while循环检查数组中是否有匹配的数字。但是,如果有,循环似乎会变得无止境,并且不会停止运行

我对java非常陌生,所以我没有尝试过很多东西,因为我不知道什么能用,什么不能用。 我相信问题出在费勒雷或斯吉卡雷。 注意:我是挪威人,所以很多我可以自己命名的东西(变量?)都是挪威语的,但我想任何人都能理解

import java.text.DecimalFormat;

import static javax.swing.JOptionPane.*;

class UnikeTall{
    java.text.DecimalFormat df = new DecimalFormat("0.0");
    static int[] array;
    boolean likt = false;
    int min = 1000;
    int max = 0;

    private void setArray(int lengde){
        array = new int[lengde];
    }

    private boolean sjekkArray(int tall){
        for(int i = 0; i < array.length; i++){
            if(tall == array[i]){
                likt = true;
            }
        }
        if(likt != true){
            likt = false;
        }

        return likt;
    }

    private void fyllArray(){
        int tall = 0;
        boolean sjekk = false;
        for(int i = 0; i < array.length; i++){
            while(!sjekk){
                tall = (int) (Math.random() * (900) + (100));
                sjekkArray(tall);
                if(likt == true){
                    continue;
                }
                if(likt == false) {
                    sjekk = true;
                }
            }
            sjekk = false;
            array[i] = tall;
        }
    }

    private String sjekkMin(){
        String lavest;
        for(int i = 0; i < array.length; i++){
            if(array[i] < min){
                min = array[i];
            }
        }
        lavest = "Minste tall er: " + min;
        return lavest;
    }

    private String sjekkMax(){
        String størst;
        for(int i = 0; i < array.length; i++){
            if(array[i] > max){
                max = array[i];
            }
        }
        størst = "Største tall er: " + max;
        return størst;
    }

    private double gjennomsnitt(){
        int sum = 0;
        double snitt;
        for(int i = 0; i < array.length; i++){
            sum += array[i];
        }
        snitt = sum / array.length;
        return snitt;
    }

    public void kjorArray(){
        String utskrift = "";
        int antall = 0;
        int lengde = Integer.parseInt(showInputDialog("Hvor langt skal arrayet være?"));
//The text in the input box translates to: "How long do you want the array to be?"
        setArray(lengde);
        fyllArray();
        for(int i = 0; i < array.length; i++){
            if(antall < 5){
                utskrift += array[i] + " ";
                antall++;
            }
            else if(antall == 5){
                utskrift += "\n" + array[i] + " ";
                antall = 1;
            }
        }
        utskrift += "\n";
        utskrift += sjekkMin();
        utskrift += "\n";
        utskrift += sjekkMax();
        utskrift += "\n";
        String gsnitt = df.format(gjennomsnitt());
        utskrift += "Snittet er: " + gsnitt;
        showMessageDialog(null, utskrift);
    }
}

public class oppgaveOblig3{
    public static void main(String[] args){
        new UnikeTall().kjorArray();
    }
导入java.text.DecimalFormat;
导入静态javax.swing.JOptionPane.*;
统一类{
java.text.DecimalFormat df=新的DecimalFormat(“0.0”);
静态int[]数组;
布尔likt=false;
int最小值=1000;
int max=0;
私有void setArray(int lengde){
数组=新整数[lengde];
}
私有布尔sjekkArray(整数){
for(int i=0;imax){
max=数组[i];
}
}
størst=“største tall er:”+max;
返回størst;
}
私人双gjennomsnitt(){
整数和=0;
双斯奈特;
for(int i=0;i
我希望数组中的所有数字都是不同的。这种情况有时会发生,但我相信只有在第一次尝试时才会发生。当数组中有匹配的数字时,它就会停止。
但是停止,我的意思是循环无止境,我的代码在那一点停止。没有得到任何错误代码,因为我的程序仍在运行。我认为
sjekkArray
方法应该检查值是否已经在数组中。你的问题是因为你在
sjek中使用了一个名为
likt
的对象变量kArray
将该测试的结果传递给调用函数
fyllArray
。但是在
sjekkArray
的开头,您无法将
likt
设置为false。因为它是一个对象变量,一旦设置为true,它将始终保持为true

sjekkArray
中使
likt
成为局部变量,并在
fyllArray
中使用
sjekkArray
的返回值


一般来说,代码中有很多不必要的复杂操作方式。如果您可以向有经验的程序员寻求指导,那就太好了。

这是使用调试器一步一步检查代码的绝佳机会。我同意调试器的说法,但在简要查看了您的代码后,我认为这会更好
likt
在使用它的方法中是一个局部变量,以避免出现不正确的状态,
max
min
也是如此,但它们可能不太重要,不需要更改