【问题标题】:Lottery Numbers Generator彩票号码生成器
【发布时间】:2016-02-04 03:24:49
【问题描述】:

我正在为课堂编写程序。这是一个彩票游戏。这是给出的问题:

编写一个java程序。该程序应该有一个名为 lotteryNumber() 的方法,它应该接受两个整数,最大和最小数字,并且应该随机生成并返回这两个数字之间的数字(包括两者)。

另外,提供一个名为 checkWinner() 的方法,它应该接受两个数组(一个用于彩票号码 和一个用于用户的号码)并检查它们是否相同(相同的号码和顺序)。如果它们是 同样,它应该返回true,否则它应该返回false。请使用您自己的逻辑来检查相等性 使用相等运算符。不允许使用像 Arrays.equals() 这样的预构建函数!

在 main 方法中,使用 lotteryNumber() 方法随机生成 4 个数字,介于 0 到 10 之间(包括两者)。然后要求用户从键盘输入 0 到 10 之间的 4 个数字。然后使用 checkWinner() 方法检查并显示用户是否中奖。

我的问题在于 lotteryNumber 方法。我应该如何只返回一个数字而不使用数组并仍然生成 4 个数字?请记住,我通常是数组和 java 的新手,并且我需要将彩票号码放在 main 方法的数组中,以便我可以将它们与用户输入进行比较。或者至少这是我从问题中得到的结果

这就是我现在所拥有的。对不起,这太乱了,我一直在尝试不同的东西,希望能弄明白

import java.util.Random;
import java.util.Scanner;

public class Assignment04 {
public static void main (String [] args){

    Scanner input = new Scanner (System.in); 

    Random r = new Random (); 

    int [] user= new int [4]; 
    //int [] rand= new int [4]; 

    int rand1= r.nextInt(10); 
    int rand2= r.nextInt(10); 
    int rand3 = lotteryNumber(rand1,rand2);

    /*for (int i=0; i<rand.length; i++){
        rand [i] = r.nextInt(11); 
    }

    for (int j=0; j<rand.length; j++){
        System.out.print(rand[j]+",");
    }*/

    System.out.println("");
    System.out.print("Enter number 1 between (1-10)= ");
    user[0] = input.nextInt();
    System.out.print("Enter number 2 between (1-10)= ");
    user[1] = input.nextInt(); 
    System.out.print("Enter number 3 between (1-10)= ");
    user[2]= input.nextInt();
    System.out.print("Enter number 4 between (1-10)= ");
    user[3] = input.nextInt();



    System.out.printf("Your numbers- %d, %d, %d, %d \n",user[0],user[1],user[2],user[3]);

    if (checkNumber(user,rand)){
        System.out.println("Winner!");
    }

    else System.out.println("Better luck next time!");

}


public static int lotteryNumber(int max, int min){

    Random r = new Random (); 
    max = 0; 
    min= 100; 
    int n= 1+r.nextInt(10) ; 

    for (int i=0; i< 4;i++){

        n = 1+r.nextInt(10);
        if (n > max) max= n;
        else if (n < min) min = n ; 
        else if (n<max && n>min) n = r.nextInt(10);

    }

    return n; 
}

public static boolean checkNumber(int [] lottery, int[] input){

    boolean a ; 
    int b=0; 

    for (int i=0; i<lottery.length; i++){
        if (lottery[i]==input[i]) b++; 
    }

    if (b==lottery.length) a = true;
    else a = false; 

    return a; 
}

}

任何帮助将不胜感激!

【问题讨论】:

  • 您是否尝试过循环使用 lotteryNumber 方法?
  • 不,我没有。我们没有在课堂上谈论这个,所以我不知道我的教授是否会同意我使用它。
  • 给你一些建议:(1) 要在 Java 中获取一个范围内的随机数,请使用 n = r.nextInt(maxValue-minValue+1)+minValue。 (2) 在您的checkNumber 方法中,您只需要一个匹配即可失败,这意味着当索引i 处的数字不匹配时,您可以提前退出循环(在for(;;) 内返回false) .试试看是否有帮助。
  • 哦,最好的指针和你最好的朋友作为未来的程序员:google :)。只需 google how to get a random number in a range in java 并选择数百万个结果中的任何一个 :)。与学习如何循环数组以及如何正确填充它们相同。
  • 好的。听起来不错。谢谢!!

标签: java arrays random methods java.util.scanner


【解决方案1】:

您可以将一组数字转换为字符串,然后将字符串转换为单个数字。

Java - Convert integer to string

How to convert a String to an int in Java?

您听起来像是让用户输入一个 4-8 位数字,一次输入 1-2 位数字。然后随机生成一个4-8位的数字,一次1-2位,按照生成/输入的顺序查看,看是否相同。

但是,如果您尝试合并然后比较,您将遇到此方法的问题,因为它们的位数并不相同。考虑例如: 随机数 10,1,0,0 和生成的一组数字 1,0,10,0 将它们组合在一起将产生 10100,这可能是一个问题,具体取决于您如何定义相等性。

您可能希望根据您的问题定义查看 4、1-2 位数字的序列。 您的相等方法应该像检查两个数组中相同位置的数字是否都相等一样简单。如果有人中奖,您只需要返回一个布尔值,而不是 4-8 位数字。

【讨论】:

    【解决方案2】:

    由于这是一项家庭作业,我将避免向您提供代码,但我会帮助您了解这个概念,您可以努力在 Java 中实现它。

    您只需在 main 方法中创建一个数组,然后让lotteryNumber() 方法返回一个数字。然后用从lotteryNumber() 方法获得的随机数填充main 方法中的数组。

    类似这样的:

    Main(){
        array[] numbers;
        loop 4 times{
            numbers[index] = lotteryNumber(0, 10);
        }
    }
    public int lotteryNumber(int min, int max){
        return (random number between min and max);
    }
    

    编辑

    由于您在评论中提到您尚未进行循环,您仍然可以手动输入随机数:

    numbers[0] = lotteryNumber(0, 10);
    numbers[1] = lotteryNumber(0, 10);
    numbers[2] = lotteryNumber(0, 10);
    numbers[3] = lotteryNumber(0, 10);
    

    【讨论】:

    • 虽然你的代码中实际上已经有一个 for 循环,所以我不确定你为什么不能在这里也只使用一个 -.-
    • 我试过你说的,效果很好!太感谢了。另外,我的意思是专门循环方法。我们确实研究了循环。
    • @Ariana 好吧,你可以在循环中做任何你想做的事情,循环可以循环方法就像它可以循环单行代码一样。绕开,它们无处不在。
    • 哈哈,那好吧。将来会做。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2015-01-14
    • 2019-07-17
    • 2022-11-16
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多