需求:在班里有5为同学需要汇报作业,采用随机排名后进行汇报。请依次输入5为同学的学号,然后展示出一组随机的排名顺序。
思想:依次遍历数组中的每个元素,每遍历一个数据,都随机一个索引值出来,让当前数据与该索引值的数据进行交换。
这类题目主要还是锻炼大家的思维能力,总体上相对简单。
在代码中我做了详细的代码说明。
package demo;
import java.util.Random;
import java.util.Scanner;
public class demo5 {
public static void main(String[] args) {
//定义一个动态的数组
int[] stuNums = new int[5];
//创建扫描器
Scanner sc = new Scanner(System.in);
//提示用户录入5为同学的学号
for (int i = 0; i < stuNums.length; i++) {
//在这里 i = 0,1,2,3,4
System.out.print("请输入当前第" + (i + 1) + "个同学的学号:");
stuNums[i] = sc.nextInt();
}
System.out.print("打乱前的数组:");
for (int i = 0; i < stuNums.length; i++) {
System.out.print(stuNums[i] + " ");
}
Random r = new Random();
//比如数组长这样[11,22,33,44,55]
// i index
//index在前在后没有区别,一样交换
//打乱数组中的元素数据
for (int i = 0; i < stuNums.length; i++) {
//没遍历到一个数据,都随机一个数组索引范围内的值
int index = r.nextInt(stuNums.length);//0-4
//定义一个临时变量记住index位置处的值。
/**
* 注意两个值交换数据需要定义一个临时变量,否则会丢失数据
* 可以理解为两杯水交换水,如果没有第三个空杯子 ,那么会有一杯水会丢失
*/
//用临时变量的值记住index位置处的值
int temp = stuNums[index];
//把i位置处的值赋值给index位置处
stuNums[index] = stuNums[i];
//把index位置原来的值赋值给i的位置处
stuNums[i] = temp;
}
//起到换行的效果
System.out.println();
System.out.print("打乱后的数组:");
//循环输出打乱后的数组
for (int i = 0; i < stuNums.length; i++) {
System.out.print(stuNums[i] + " ");
}
}
}
运行结果图:
注:因为笔者的能力有限,代码中会有许多的问题没有考虑到,如果您在浏览或者操作代码的时候发现了问题,还请您在第一时间在评论区留言,笔者看到后会在第一时间修改问题,谢谢。