Java 彩票程序忽略了功能
我打算写一个程序,列出一个又一个随机数,它会这样做(伴随着嘟嘟声)。但是,它忽略了程序正确运行所需的基本功能。函数的作用是:要求用户输入一个介于范围(1000-9999)之间的整数,然后将该整数与中奖号码(随机数)进行比较,以确定用户是否正确猜到了该数字,从而中奖。我最近才开始用Java编写,所以我不太确定我是否犯了一个基本的错误。任何帮助都将不胜感激Java 彩票程序忽略了功能,java,interface,inner-classes,Java,Interface,Inner Classes,我打算写一个程序,列出一个又一个随机数,它会这样做(伴随着嘟嘟声)。但是,它忽略了程序正确运行所需的基本功能。函数的作用是:要求用户输入一个介于范围(1000-9999)之间的整数,然后将该整数与中奖号码(随机数)进行比较,以确定用户是否正确猜到了该数字,从而中奖。我最近才开始用Java编写,所以我不太确定我是否犯了一个基本的错误。任何帮助都将不胜感激 package edu.pupr.pega4; import java.awt.Toolkit; import java.awt.event.A
package edu.pupr.pega4;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import java.util.Scanner;
import javax.swing.JOptionPane;
import javax.swing.Timer;
public class Pega4Driver {
public static void main(String[] args) {
Pega4 test = new Pega4(2000, true);
test.start();
JOptionPane.showMessageDialog(null, "Quit program?");
JOptionPane.showMessageDialog(null, "Perdiste!!!");
System.exit(0);
}
}
class Pega4 {
private int interval; //Time interval for new number to appear
private boolean beep; //BEEP
private int number; //The input number
private int tiradas = 1; //Counter
private int winNum; //The winning number
//Constructor
public Pega4(int interval, boolean beep) {
this.interval = interval;
this.beep = beep;
}
//Returns a random number within a specified range
public double getRandomIntegerBetweenRange(double min, double max){
double x = (int)(Math.random()*((max-min)+1))+min;
return x;
}
public void start() {
class Pega4Inner implements Asker, ActionListener {
Scanner input = new Scanner(System.in);
Date now = new Date();
@Override
public void ask() {
System.out.println("Entrar numero deseado: ");
number = input.nextInt();
//Input Validation
if (number < 1000 || number > 9999)
{
System.out.println("Entrada invalida. Entrar numero deseado: ");
number = input.nextInt();
}
System.out.println(now);
}
@Override
public void actionPerformed(ActionEvent e) {
winNum = (int) getRandomIntegerBetweenRange(1000, 9999);
System.out.println("Tirada #" + (tiradas++) + ": " + winNum);
if (beep)
Toolkit.getDefaultToolkit().beep();
if (winNum == number)
{
JOptionPane.showMessageDialog(null, "Ganaste!!!");
System.exit(0);
}
}
}
ActionListener listener = new Pega4Inner();
Timer timer = new Timer(interval, listener);
timer.start();
}
}
您需要实际从某处调用
ask()
方法:)
我认为在当前代码中,在Pega4Inner
中的actionPerformed()
方法的开头应该是这样做的:
public void actionPerformed(ActionEvent e) {
ask();
winNum = (int) getRandomIntegerBetweenRange(1000, 9999);
…
编辑
根据只调用一次ask()
的要求,一种方法是将此方法从内部类中取出,放到外部类中,然后在驱动程序类中显式调用它。因此,您的Pega4
类可以如下所示:
class Pega4 {
private int interval; //Time interval for new number to appear
private boolean beep; //BEEP
private int number; //The input number
private int tiradas = 1; //Counter
private int winNum; //The winning number
//Constructor
Date now = new Date();
Scanner input = new Scanner(System.in);
public Pega4(int interval, boolean beep) {
this.interval = interval;
this.beep = beep;
}
//Returns a random number within a specified range
public double getRandomIntegerBetweenRange(double min, double max) {
double x = (int) (Math.random() * ((max - min) + 1)) + min;
return x;
}
public void ask() {
System.out.println("Entrar numero deseado: ");
number = input.nextInt();
//Input Validation
while (number < 1000 || number > 9999) { // not IF here
System.out.println("Entrada invalida. Entrar numero deseado: ");
number = input.nextInt();
}
System.out.println(now);
}
public void start() {
class Pega4Inner implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// ask();
winNum = (int) getRandomIntegerBetweenRange(1000, 9999);
System.out.println("Tirada #" + (tiradas++) + ": " + winNum);
if (beep) {
Toolkit.getDefaultToolkit().beep();
}
if (winNum == number) {
JOptionPane.showMessageDialog(null, "Ganaste!!!");
System.exit(0);
}
}
}
ActionListener listener = new Pega4Inner();
Timer timer = new Timer(interval, listener);
timer.start();
}
}
“它忽略了程序正常运行所需的基本功能。”。好的-它忽略了什么/做错了什么?我认为如果你真的调用你的ask方法会有所帮助…我已经尝试过了,但它没有按预期运行。当我这样调用ask()函数时,程序要求用户输入,生成一个随机数,然后再次要求用户输入一个数字。它应该只询问一次,然后生成随机数列表,直到用户退出或数字与用户输入匹配。还需要注意的是,
ask()
检查输入是否在所需范围内(1000-9999)的健全性检查只工作一次(例如,如果第二次输入无效数字,它将接受它)。因此,我也将if
切换为,而则用于此操作
class Pega4 {
private int interval; //Time interval for new number to appear
private boolean beep; //BEEP
private int number; //The input number
private int tiradas = 1; //Counter
private int winNum; //The winning number
//Constructor
Date now = new Date();
Scanner input = new Scanner(System.in);
public Pega4(int interval, boolean beep) {
this.interval = interval;
this.beep = beep;
}
//Returns a random number within a specified range
public double getRandomIntegerBetweenRange(double min, double max) {
double x = (int) (Math.random() * ((max - min) + 1)) + min;
return x;
}
public void ask() {
System.out.println("Entrar numero deseado: ");
number = input.nextInt();
//Input Validation
while (number < 1000 || number > 9999) { // not IF here
System.out.println("Entrada invalida. Entrar numero deseado: ");
number = input.nextInt();
}
System.out.println(now);
}
public void start() {
class Pega4Inner implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// ask();
winNum = (int) getRandomIntegerBetweenRange(1000, 9999);
System.out.println("Tirada #" + (tiradas++) + ": " + winNum);
if (beep) {
Toolkit.getDefaultToolkit().beep();
}
if (winNum == number) {
JOptionPane.showMessageDialog(null, "Ganaste!!!");
System.exit(0);
}
}
}
ActionListener listener = new Pega4Inner();
Timer timer = new Timer(interval, listener);
timer.start();
}
}
...
Pega4 test = new Pega4(2000, true);
test.ask();
test.start();
...