java新手在线求救?

package com.itheima.study1;
import java.util.Random;
import java.util.Scanner;

public class day9_17_4 {
    public static void main(String[] args) {
        //生成中奖号码(6个红球,1个蓝球组成)
        int[] brr = createNumber();
        int[] usersNumbers = userinPutNumber();

    }
    //创建一个可以随机生成中将号码的方法
    public static int[] createNumber() {
        //创建数组用于添加中奖号码
        int[] arr = new int[7];
        //随机生成号码,并添加到数组中
        //红球,不可以重复(思路:将1到33进行打乱,并选取前6个进行抽取)
        Random random = new Random();
        //建立红球数组
        int[] redBowl = new int[33];
        for (int i = 0; i < redBowl.length; i++) {
            redBowl[i] = i + 1;
        }
        //生成随机代码对红球数组进行打乱
        for (int i = 0; i < redBowl.length; i++) {
            int Random = random.nextInt(33);
            //引用中间量对每一个索引进行交换
            int temp = redBowl[i];
            redBowl[i] = redBowl[Random];
            redBowl[Random] = temp;
        }
        //将红球数组中的前六个索引放入中奖数组arr中
        for (int i = 0; i < arr.length - 1; i++) {
            arr[i] = redBowl[i];
        }
        //生成蓝球号码并添加到数组中
        int blueNumber = random.nextInt(16);
        blueNumber = blueNumber + 1;
        arr[arr.length - 1] = blueNumber;
        return arr;
    }


    //创建用户输入彩票号码的方法
    public static int[] userinPutNumber() {
        //创建用于添加用户号码的数组
        int[] usersNumber = new int[7];
        //利用键盘录入让用户输入
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < usersNumber.length - 1;) {
            System.out.println("请输入第" + (i + 1) + "个红球号码");
            int redNumbers = sc.nextInt();
            //调用判断用户是否重复的方法
            if (redNumbers >= 1 && redNumbers <= 33) {
                boolean flag = estimateUsers(usersNumber, redNumbers);
                if (!flag) {
                    usersNumber[i] = redNumbers;
                    ++i;
                } else {
                    System.out.println("当前红色号码重复");
                }
            } else {
                System.out.println("请输入合法的红色号码");
            }
        }
        int blueNumber = sc.nextInt();
        for (int i = 0; i < blueNumber;) {
            if (blueNumber >= 1 && blueNumber <= 16) {
                usersNumber[usersNumber.length - 1] = blueNumber;
                i++;
            } else {
                System.out.println("请输入合法蓝色号码");
            }
        }
        return usersNumber;
    }
    //建立方法判断用户的红球号码是否唯一不重复
    public static boolean estimateUsers(int[] usersNumber, int redNumbers) {
        boolean estimateWords = false;
        for (int i = 0; i < usersNumber.length - 1;) {
            if (usersNumber[i] == redNumbers) {
                estimateWords = true;
                i++;
            }
        }
        return estimateWords;
    }
}

这个代码录入完第一个数字之后之后,就没有然后了

不知道是哪里出了问题,请问怎么能让它继续运行

阅读 1.2k
3 个回答

estimateUsers方法里的for循环是个死循环,第一次输入的时候,i永远不会++

    public static boolean estimateUsers(int[] usersNumber, int redNumbers) {
        boolean estimateWords = false;
        for (int i = 0; i < usersNumber.length - 1;i++) {
            if (usersNumber[i] == redNumbers) {
                estimateWords = true;
                break;
            }
        }
        return estimateWords;
    }

试试这样呢

新手上路,请多包涵

有个问题int Random = random.nextInt(33);你这个方法生成的是0-32的随机数,如果你还要33的话应该是random.nextInt(34);
引用jdk文档:nextInt(int bound)
Returns a pseudorandom, uniformly distributed int value between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence.

我帮你改进了一下代码

package com.itheima.study1;
import java.util.Random;
import java.util.Scanner;

public class day9_17_4 {
    public static void main(String[] args) {
        //生成中奖号码(6个红球,1个蓝球组成)
        int[] brr = createNumber();
        int[] usersNumbers = userInputNumber();
    }

    //创建一个可以随机生成中奖号码的方法
    public static int[] createNumber() {
        //创建数组用于添加中奖号码
        int[] arr = new int[7];
        //随机生成号码,并添加到数组中
        //红球,不可以重复(思路:将1到33进行打乱,并选取前6个进行抽取)
        Random random = new Random();
        //建立红球数组
        int[] redBowl = new int[33];
        for (int i = 0; i < redBowl.length; i++) {
            redBowl[i] = i + 1;
        }
        //生成随机代码对红球数组进行打乱
        for (int i = 0; i < redBowl.length; i++) {
            int randomIndex = random.nextInt(33);
            //引用中间量对每一个索引进行交换
            int temp = redBowl[i];
            redBowl[i] = redBowl[randomIndex];
            redBowl[randomIndex] = temp;
        }
        //将红球数组中的前六个索引放入中奖数组arr中
        for (int i = 0; i < arr.length - 1; i++) {
            arr[i] = redBowl[i];
        }
        //生成蓝球号码并添加到数组中
        int blueNumber = random.nextInt(16) + 1;
        arr[arr.length - 1] = blueNumber;
        return arr;
    }

    //创建用户输入彩票号码的方法
    public static int[] userInputNumber() {
        //创建用于添加用户号码的数组
        int[] usersNumber = new int[7];
        //利用键盘录入让用户输入
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < usersNumber.length - 1;) {
            System.out.println("请输入第" + (i + 1) + "个红球号码");
            int redNumbers = sc.nextInt();
            //调用判断用户是否重复的方法
            if (redNumbers >= 1 && redNumbers <= 33) {
                boolean flag = estimateUsers(usersNumber, redNumbers);
                if (!flag) {
                    usersNumber[i] = redNumbers;
                    ++i;
                } else {
                    System.out.println("当前红色号码重复");
                }
            } else {
                System.out.println("请输入合法的红色号码");
            }
        }
        while (true) {
            System.out.println("请输入蓝球号码");
            int blueNumber = sc.nextInt();
            if (blueNumber >= 1 && 16) {
                usersNumber[usersNumber.length - 1] = blueNumber;
                break;
            } else {
                System.out.println("请输入合法蓝色号码");
            }
        }
        sc.close();
        return usersNumber;
    }

    //建立方法判断用户的红球号码是否唯一不重复
    public static boolean estimateUsers(int[] usersNumber, int redNumbers) {
        boolean estimateWords = false;
        for (int i = 0; i < usersNumber.length - 1; i++) {
            if (usersNumber[i] == redNumbers) {
                estimateWords = true;
                break;
            }
        }
        return estimateWords;
    }
}
推荐问题
宣传栏