Java中整数数组的随机洗牌

Java中整数数组的随机洗牌,java,arrays,Java,Arrays,这是我第一次使用数组。 我应该提示用户输入5个数组值,然后以随机顺序显示它们。 我很困惑,因为这是我第一次这样做。 不管怎样,我的代码在这里 import java.util.*; public class Test { public static void main(String[] args) { int myArray[] = new int[5]; System.out.println("Please enter 5 numbers: ");

这是我第一次使用数组。 我应该提示用户输入5个数组值,然后以随机顺序显示它们。 我很困惑,因为这是我第一次这样做。 不管怎样,我的代码在这里

import java.util.*;
public class Test {
    public static void main(String[] args) {
        int myArray[] = new int[5];
        System.out.println("Please enter 5 numbers: ");
        Scanner input = new Scanner(System.in);
        for (int i = 0; i < myArray.length - 1; i--) {
            int j = (int) (Math.random() * (i + 1));
            myArray[i] = input.nextInt();


            System.out.println("The numbers are: ");

            System.out.println(myArray[0]);
            System.out.println(myArray[1]);
            System.out.println(myArray[2]);
            System.out.println(myArray[3]);
            System.out.println(myArray[4]);


            int temp = myArray[i];
            myArray[i] = myArray[j];
            myArray[j] = temp;

            System.out.println("The numbers, shuffled, are: ");
            System.out.println(myArray[0]);
            System.out.println(myArray[1]);
            System.out.println(myArray[2]);
            System.out.println(myArray[3]);
            System.out.println(myArray[4]);
        }
    }
}
import java.util.*;
公开课考试{
公共静态void main(字符串[]args){
int myArray[]=新的int[5];
System.out.println(“请输入5个数字:”);
扫描仪输入=新扫描仪(System.in);
对于(int i=0;i
感谢大家的支持。

import java.util.Random;
import java.util.Random;
import java.util.Scanner;
import java.util.concurrent.ThreadLocalRandom;

public class Test {

    public static void shuffle(int[] arr) {
        Random rnd = ThreadLocalRandom.current();
        for (int i = arr.length - 1; i > 0; i--) {
            int index = rnd.nextInt(i + 1);
            int t = arr[index];
            arr[index] = arr[i];
            arr[i] = t;
        }
    }

    public static void main(String[] args) {
        int myArray[] = new int[5];
        System.out.println("Please enter 5 numbers: ");
        Scanner input = new Scanner(System.in);
        for (int i = 0; i < myArray.length; i++) {
            System.out.println("Enter " + (i + 1) + ". number: ");
            myArray[i] = input.nextInt();
        }
        System.out.println("The numbers are: ");
        for (int j2 = 0; j2 < myArray.length; j2++) {
            System.out.println(myArray[j2]);
        }

        shuffle(myArray);

        System.out.println("The numbers, shuffled, are: ");
        for (int j2 = 0; j2 < myArray.length; j2++) {
            System.out.println(myArray[j2]);
        }
    }
}
导入java.util.Scanner; 导入java.util.concurrent.ThreadLocalRandom; 公开课考试{ 公共静态无效洗牌(int[]arr){ Random rnd=ThreadLocalRandom.current(); 对于(int i=arr.length-1;i>0;i--){ 整数指数=rnd.nextInt(i+1); int t=arr[index]; arr[index]=arr[i]; arr[i]=t; } } 公共静态void main(字符串[]args){ int myArray[]=新的int[5]; System.out.println(“请输入5个数字:”); 扫描仪输入=新扫描仪(System.in); for(int i=0;i
A-说明 假设输入值的顺序为
{'1'、'2'、'3'、'4'、'5'}
。洗牌会随机破坏顺序,因此必须随机更改元素的位置

在演示代码中

  • swapArrayElement
    交换作为参数传递的元素

  • getRandom
    返回一个介于0和作为参数传递给方法的
    范围之间的随机值

  • shufflearlay
    通过随机更改元素的位置来洗牌数组。请注意,有一个额外的
    布尔isShuffled[]
    数组,它是布尔数组,因为我们必须跟踪位置,无论它们是否被洗牌

  • isArrayShuffled
    方法,检查是否所有位置都被洗牌

B-演示代码
提示:您也可以按随机顺序插入。程序应将用户输入的输入随机化,并显示输出。由于您希望按实际顺序和随机顺序显示,因此最好按顺序保存。洗牌的简单方法是将其转换为列表并使用Collections.shuffle方法。您还可以随机获取数组索引并按随机顺序打印它们(而不是无序排列数组并按顺序打印)。注意不要打印两次相同的索引,因为您知道数组的大小:1-您可以生成随机索引(0和array.length之间的数字)2-如果该索引中没有任何内容,请插入用户输入,否则重复1。for循环中的任何内容都不会运行
import java.util.Scanner;

public class Test {

    public static final int ARRAY_LENGTH = 5;

    public static void main(String[] args) {
        int myArray[] = new int[ARRAY_LENGTH];



        Scanner input = new Scanner(System.in);
        System.out.println("Please enter 5 numbers: ");

        for(int i = 0; i < myArray.length; i++)
            myArray[i] = input.nextInt();

        System.out.println("\nThe numbers are: ");
        printIntArray(myArray);

        shuffleArray(myArray);
        System.out.println("\nThe numbers, shuffled, are: ");
        printIntArray(myArray);

        input.close();  // no memory leaks!
    }

    // method for printing array
    public static void printIntArray(int[] array) {
        for(int i = 0; i < array.length; i++)
            System.out.printf("%2d ", array[i]);
        System.out.printf("%n");    // use %n for os-agnostic new-line
    }

    // method for shuffling array
    public static void shuffleArray(int[] array) {
        int range = array.length;
        boolean isShuffled[] = new boolean[range];  // store which positions are shuffled

        while(!isArrayShuffled(isShuffled)) {
            int positionSrc = getRandom(range);
            int positionDst = getRandom(range);

            swapArrayElement(array, positionSrc, positionDst);
            isShuffled[positionSrc] = true;
            isShuffled[positionDst] = true;
        }

    }

    public static int getRandom(int maxRange) {
        return (int)(Math.random()*maxRange);
    }

    public static void swapArrayElement(int[] array, int i, int j) {
        int temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }

    public static boolean isArrayShuffled(boolean[] isShuffled) {
        for(int i = 0; i < isShuffled.length; i++)
            if(isShuffled[i] == false)
                return false;

        return true;
    }
}
Please enter 5 numbers: 
1 2 3 4 5

The numbers are: 
 1  2  3  4  5 

The numbers, shuffled, are: 
 4  2  5  1  3