簡體   English   中英

2個數組隨機顯示1-10和隨機1-10無功能

[英]2 arrays to randomly display 1-10 and random 1-10 without function

這個程序的目標是讓 A2[] 以隨機順序顯示數字 1-10。它需要在沒有任何基礎知識的情況下完成。 A2[] 從 A1[] 獲取數字,A1[] 數組將數字 1-10 按順序存儲。 程序在當前狀態下運行,但不會過濾掉已經存儲在 A2[] 中的結果。 例如.... 4,2,3,7,5,9,7,1,4 不應該是結果。 應該只顯示 1-10 的隨機順序,每個 int 只出現一次。 任何幫助是極大的贊賞。 目前的代碼如下:`

public class W07problem07 {

    public static int getRandomIntRange(int min, int max) {
        int x = (int) (Math.random() * ((max - min))) + min;
        return x;
    }

    public static void main(String[] args) {
        int ranNum;
        int count = 1;
        int[] A1 = new int[10];
        int[] A2 = new int[10];

        //loop for storing 1-10 int number withing  A1[].
        for (int k = 0; k < A1.length; k++) {
            A1[k] = count;
            count++;
        }
        for (int k = 0; k < A2.length; k++) {
            A2[k] = k;
        }

        for (int j = 0; j < A2.length; j++) {
            int a;
            ranNum = getRandomIntRange(0, A2.length);
            a = A2[j];
            if(a==ranNum){
                j--;
            } else{
                A2[j]= A1[ranNum];
            }
        }



        for (int k = 0; k < A2.length; k++) {
            System.out.println(A2[k]);
        }
    }
}
`

有很多方法可以做你所要求的。

最簡單的方法之一是應用哈希理論,使用下一個未調用的數字作為下一個(偽)隨機數。
我假設您在代碼中編寫的內容沒有多大意義,因此按照接下來的操作,我假設 A1 中填充了數字 1-10,而您直接使用混洗后的數字填充了 A2。

例子:
這是 A2 的當前狀態。 下一個選擇的隨機數是 1,但這並不好,只要它已經被選擇了。

A1   |1 2 3 4 5 6 7 8 9 10|
A2   |1 4 7 9 . . . . . . |

因此,當發現“碰撞”時,繼續應用此修復程序:
新的隨機數變為 x = x+1 直到取到一個未選擇的數字。

所以

A1   |1 2 3 4 5 6 7 8 9 10|
A2   |1 4 7 9 2 . . . . . |

可以想象,您可以使用很多沖突策略,前一種稱為開放尋址。

另一種解決方案

public class W07problem07 {
    public static int getRandomIntRange(int min, int max) {
        int x = (int) (Math.random() * ((max - min))) + min;
        return x;
    }
    public static void main(String[] args) {
        int count = 1;
        int[] A1 = new int[10];
        int[] A2 = new int[10];
        //loop for storing 1-10 int number withing  A1[].
        for (int k = 0; k < A1.length; k++) {
            A1[k] = count;
            count++;
        }
        int j = 0;
        while (j < A1.length) {
            int ranNum = getRandomIntRange(1, A1.length + 1);
            if (!numAlreadyExists(A2, ranNum)) {
                A2[j++] = ranNum;
            }
        }
        for (int k = 0; k < A2.length; k++) {
            System.out.println(A2[k]);
        }
    }
    public static boolean numAlreadyExists(int[] array, int element) {
        for (int i = 0; i < array.length; i++) {
            if (element == array[i]) {
                return true;
            }
        }
        return false;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM