鱼C论坛

 找回密码
 立即注册
查看: 4013|回复: 31

[已解决]Java数组问题

[复制链接]
发表于 2022-1-13 19:37:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import java.util.Arrays;
import java.util.Scanner;

public class LotteryDrawing {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("how many numbers do you need to draw?");
        int k = in.nextInt();

        System.out.print("what is the highest number you can draw?");
        int n = in.nextInt();

        int[] number = new int[n];//建立一个新的数组
        for (int i = 0; i < number.length; i++)
            number[i] = i + 1;

        int[] result = new int[k];
        for (int i = 0; i < result.length; i++) {
            //建立一个0~n-1之间的索引值
            int r = (int) (Math.random() * n);

            result[i] = number[r];

            number[r] = number[n - 1];
            n--;

        }
        Arrays.sort(result);
        System.out.print("bet the following combination,It'll make you rich");
        for (int r : result)
            System.out.println(r);
    }
}



这是控制台的输出信息:
how many numbers do you need to draw?100
what is the highest number you can draw?10
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 10
        at New.LotteryDrawing.main(LotteryDrawing.java:26)

Process finished with exit code 1

出错的代码为我标红的那一个,我这个是按照书上输入的,在给定的K个数字中随机抽取n个数字输出,求大佬帮忙看一下,代码如何修改才可以运行。
最佳答案
2022-1-13 20:30:41
本帖最后由 小伤口 于 2022-1-13 20:33 编辑

你输入的100是k,也就是for循环会循环100次,而你的n只有10,所以n--在for循环10次之后就变成负数,就溢出了,
会不会是你初始化数组n和k写反了,我有点没搞懂这个题目,不过这样的确可以正常运行
import java.util.Arrays;
import java.util.Scanner;

public class FamilyAccount {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("how many numbers do you need to draw?");
        int k = in.nextInt();

        System.out.print("what is the highest number you can draw?");
        int n = in.nextInt();

        int[] number = new int[k];//建立一个新的数组
        for (int i = 0; i < number.length; i++)
            number[i] = i + 1;

        int[] result = new int[n];
        for (int i = 0; i < result.length; i++) {
            //建立一个0~n-1之间的索引值
            int r = (int) (Math.random() * n);

            result[i] = number[r];

            number[r] = number[n - 1];
            n--;

        }
        Arrays.sort(result);
        System.out.print("bet the following combination,It'll make you rich");
        for (int r : result)
            System.out.println(r);
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-13 20:28:23 | 显示全部楼层
题目真的是这个意思吗,我感觉有点对不上呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-13 20:30:41 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +1 鱼币

本帖最后由 小伤口 于 2022-1-13 20:33 编辑

你输入的100是k,也就是for循环会循环100次,而你的n只有10,所以n--在for循环10次之后就变成负数,就溢出了,
会不会是你初始化数组n和k写反了,我有点没搞懂这个题目,不过这样的确可以正常运行
import java.util.Arrays;
import java.util.Scanner;

public class FamilyAccount {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("how many numbers do you need to draw?");
        int k = in.nextInt();

        System.out.print("what is the highest number you can draw?");
        int n = in.nextInt();

        int[] number = new int[k];//建立一个新的数组
        for (int i = 0; i < number.length; i++)
            number[i] = i + 1;

        int[] result = new int[n];
        for (int i = 0; i < result.length; i++) {
            //建立一个0~n-1之间的索引值
            int r = (int) (Math.random() * n);

            result[i] = number[r];

            number[r] = number[n - 1];
            n--;

        }
        Arrays.sort(result);
        System.out.print("bet the following combination,It'll make you rich");
        for (int r : result)
            System.out.println(r);
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-14 09:05:06 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-14 09:27:26 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-1-14 09:40:20 | 显示全部楼层
小伤口 发表于 2022-1-13 20:30
你输入的100是k,也就是for循环会循环100次,而你的n只有10,所以n--在for循环10次之后就变成负数,就溢出 ...

谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-14 10:49:35 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-14 10:57:24 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-14 15:50:14 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-16 12:57:11 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-21 14:20:27 | 显示全部楼层

回帖奖励 +1 鱼币

yes
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-21 14:24:37 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-21 14:25:24 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-21 20:31:22 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-23 10:58:06 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-26 09:26:28 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-31 07:33:22 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-31 11:14:05 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-31 13:27:17 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-31 14:41:56 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 03:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表