我有一个程序可以生成6个数字的行(整数数组)。
我将输出传递给另一个程序,该程序使用BubbleSort算法对其进行排序,然后将其写入文本文件。
如果使用第一个程序但没有通过,则可以正常工作,没有重复的数字,没有零。但是,当排序时,会有重复的数字,甚至我看到零,这种情况下我无法重现atm,但会重现两次出现的数字。它可能与多线程/并行处理或执行它的环境有关,它由一个amd多核win 10主机和deb jessie guest组成。

java LottoArray | java BubbleSort>test2.txt //终端

test2.txt

2 13 16 20 27 40
9 14 17 21 25 41
6 11 11 19 27 44
4 10 25 34 39 47
11 12 17 36 44 48
1 15 23 31 39 40
3 22 22 23 33 45
1 25 26 26 35 49
11 14 24 25 41 49
6 6 14 17 38 46
4 19 19 28 35 39


如您所见,最后一行之前的一行中的6是两倍,而22和11则是两倍。

public class LottoArray{

    public static void main (String [] args){

    for(int o=0;o<=10;o++){
        int Reihe [] = new int [6];
        int zahl;

        int j=0;
        int i= 0;

        while(j<Reihe.length){
            zahl = (int) (Math.random()*50);
             boolean schonda = false;
            while ( i<j){
                if(Reihe[i]== zahl)
                    schonda=true;
                i++;
            }

            if(schonda==false && zahl !=0){
                Reihe[j]=zahl;
                j++;}
        }

       for(int z=0;z<6;z++){
            System.out.print(Reihe[z]+" ");
    }
    System.out.println();

    }

   }
}


public class BubbleSort {

    public static void main(String args[]) {
    int arr[]= new int[6];
    while(!StdIn.isEmpty()){

           for(int i=0;i<6;i++)

         arr[i]= StdIn.readInt();
        boolean getauscht;

        do {
            getauscht= false;


            for (int i=0; i<arr.length-1; i++) {

                if ( arr[i] > arr[i+1]) {
                    int tmp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = tmp;
                    getauscht = true;
                }
            }

        }while(getauscht);


        for (int i=0; i<arr.length; i++)
            System.out.print(arr[i]+" " );
        System.out.println();
        }
    }
}


如果我使用不带bubbleSort的代码并将输出流式传输到文本文件中,则不会有重复的数字和零,因为我对条件if(schonda==false && zahl !=0)进行了编码,所以这不可能

15 2 20 5 26 34
13 6 15 33 12 37
44 17 16 23 40 25
25 47 10 43 40 44
25 29 3 30 10 41
32 1 23 35 43 28
9 34 28 32 33 25
5 46 31 16 25 9
9 13 16 18 40 5
29 15 16 2 16 15
34 33 44 13 43 48


有人经历过这种不应该发生的数字吗?

最佳答案

您的问题是在LottoArray的以下块中:

int j=0;
int i= 0;

while(j<Reihe.length){
    zahl = (int) (Math.random()*50);
    boolean schonda = false;
    while ( i<j){
        if(Reihe[i]== zahl)
            schonda=true;
        i++;
    }

    if(schonda==false && zahl !=0){
        Reihe[j]=zahl;
        j++;
    }
}



第一次从上方(对于第一个元素)进入while (i<j){循环时,i和j均为0,因此不会执行循环。
第二次(检查第二个数字),i为0且j为1,因此执行循环并增加了i
第三次(检查第三个数字),i为1,j为2。
其余部分相同,i始终为j-1


这是一个错误,因为您没有在第一个元素上开始检查。我想您只能使用BubbleSort来获取重复数据,因为错误不存在。

要解决此问题,请在第一个i内部与while var相同的位置初始化schonda,而不是在j上方。

07-26 09:27