蓝星zx 2022-09-19 20:46 采纳率: 87.5%
浏览 19
已结题

java练习,求帮助

java练习,遇到了问题,求指教
问题应该在13行和14行。


package 作业;

import java.util.Random;

public class price {
    public static void main(String[] args) {
        int arr[]={1,10,300,1000,2000};//设立一个数组,求元素随机的排列
        int arr1[]=new int[5];
        Random r=new Random();//随机数作为索引
        int m=0;
        for (int i = 0; i < arr1.length;) {//这里循环是判断抽的数是否重复
           m=r.nextInt(arr.length);
             arr1[i]=arr[m];//如果把这行改成int price=arr[m]下一行改为judge(arr1,price)就没有问题
           if(!judge(arr1,arr1[i])){//
               arr1[i]=arr[m];
               i++;
           }
        }
        for (int i = 0; i < arr1.length; i++) {
            System.out.println(arr1[i]+" ");
        }
    }
    public static boolean judge(int arr1[],int price){//这个方法是用于判断抽的数是否重复。
        for (int i = 0; i < arr1.length; i++) {
            if(arr1[i]==price){
                return true;
            }
            }
        return false;
        }

    }
//最终idea会让你一直输入,无法得到想要的打印结果。


  • 写回答

1条回答 默认 最新

  • Java大魔王 2022-09-19 21:22
    关注

    你在14行还没判断重复呢,就先放入了arr1中。
    而你的15行是判断数组arr1中有没有重复存在刚刚放入的arr1[m],如果不重复,才进入if中,才执行i++
    因为你第一次放入的肯定不重复,所以他就一直不会i++,这肯定无限死循环了,一直卡在了12行的for循环中了
    修改如下后能正确运行

    
    
    for (int i = 0; i < arr1.length;) {
                //随机生成一个数组下表
                m = r.nextInt(arr.length);
                //直接判断随机取得数是否再目标数组中重复了
                if (!judge(arr1, arr[m])) {
                    //如果不重复,才放入,并执行i++;
                    arr1[i] = arr[m];
                    i++;
                }
            }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 9月28日
  • 已采纳回答 9月20日
  • 创建了问题 9月19日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来