Java实现轮盘赌数组指定元素移至索引0其余元素右移
轮盘机数组位移功能修正方案
原代码存在的问题
- 缺少
java.util.Scanner包导入,编译无法通过 collisionIndex赋值错误:原本存储的是匹配到的数字本身,实际应该存储该数字对应的数组下标i- 内层循环逻辑完全失效:循环起始值、终止条件、遍历方向均不符合需求,代码不会进入内层循环执行位移操作
- 数组位移逻辑错误:没有将原索引0到匹配索引前一位的元素依次后移一位
- 数组打印方式错误:直接打印数组名只会输出内存地址,无法查看数组实际内容
修正后完整代码
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { int[] rouletteNumbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36}; Scanner scanner = new Scanner(System.in); System.out.println("Enter number : "); int whatNumberCame = scanner.nextInt(); int collisionIndex = -1; // 查找输入数字对应的下标 for(int i = 0; i < rouletteNumbers.length ; i++){ if(rouletteNumbers[i] == whatNumberCame){ collisionIndex = i; System.out.println("COLLISION AT INDEX " + i); break; } } // 校验输入合法性,执行位移 if(collisionIndex != -1){ // 暂存要放到首位的数字 int targetNum = rouletteNumbers[collisionIndex]; // 从匹配下标开始,将前序元素依次后移一位 for (int j = collisionIndex; j > 0 ; j--){ rouletteNumbers[j] = rouletteNumbers[j - 1]; } // 首位赋值为最新开出的数字 rouletteNumbers[0] = targetNum; // 打印最终数组 System.out.println("更新后数组:" + Arrays.toString(rouletteNumbers)); }else{ System.out.println("输入的数字不在轮盘数字范围内"); } scanner.close(); } }
功能验证
输入数字10时,输出的数组为:[10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
和需求示例完全一致。
内容的提问来源于stack exchange,提问作者Badri Rusadze
相关产品推荐
相关产品推荐

