Java中整数数组的随机洗牌
这是我第一次使用数组。 我应该提示用户输入5个数组值,然后以随机顺序显示它们。 我很困惑,因为这是我第一次这样做。 不管怎样,我的代码在这里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: ");
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
返回一个介于0和作为参数传递给方法的getRandom
范围之间的随机值
通过随机更改元素的位置来洗牌数组。请注意,有一个额外的shufflearlay
数组,它是布尔数组,因为我们必须跟踪位置,无论它们是否被洗牌布尔isShuffled[]
方法,检查是否所有位置都被洗牌isArrayShuffled
提示:您也可以按随机顺序插入。程序应将用户输入的输入随机化,并显示输出。由于您希望按实际顺序和随机顺序显示,因此最好按顺序保存。洗牌的简单方法是将其转换为列表并使用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