向程序添加数据(如果存在);否则会在java中生成随机数据
我有一个显示随机数学问题的数学程序,当你点击查看下一个答案时,下一个答案就会出现 我添加了一个上传文件upload.txt的方法 我希望我的程序运行此文件中的数学问题,而不是运行随机 如果文件存在,则为数学问题。如果不是,我希望程序以当前方式运行,即运行随机数学问题 我当前添加文本文件的方法不是100%准确。 我不想把写在文件里的问题加进去。通过使用StackOverflow上另一个线程的代码将数字上传到命令提示符,我就成功了 随机数学问题课向程序添加数据(如果存在);否则会在java中生成随机数据,java,math,random,Java,Math,Random,我有一个显示随机数学问题的数学程序,当你点击查看下一个答案时,下一个答案就会出现 我添加了一个上传文件upload.txt的方法 我希望我的程序运行此文件中的数学问题,而不是运行随机 如果文件存在,则为数学问题。如果不是,我希望程序以当前方式运行,即运行随机数学问题 我当前添加文本文件的方法不是100%准确。 我不想把写在文件里的问题加进去。通过使用StackOverflow上另一个线程的代码将数字上传到命令提示符,我就成功了 随机数学问题课 import java.util.Random;
import java.util.Random;
public class MathProblems {
private static final int MAX_NUMBER = 1000;
private static final Random random = new Random();
private double expected = 0;
private String question = "";
public void run() {
final int a = random.nextInt(MAX_NUMBER);
final int b = random.nextInt(MAX_NUMBER);
final int type = random.nextInt(4);
switch (type) {
case 0:
add(a, b);
break;
case 1:
subtract(a, b);
break;
case 2:
multiply(a, b);
break;
case 3:
divide(a, b);
break;
}
}
private void add(final int a, final int b) {
expected = a + b;
askQuestion(a + " + " + b + " = ");
}
private void subtract(final int a, final int b) {
expected = a - b;
askQuestion(a + " - " + b + " = ");
}
private void multiply(final int a, final int b) {
expected = a * b;
askQuestion(a + " * " + b + " = ");
}
private void divide(final int a, final int b) {
expected = (double)a / b;
askQuestion(a + " / " + b + " = ");
}
private void askQuestion(final String question) {
this.question = question;
}
public String getQuestion() {
return question;
}
@Override
public String toString(){
return Double.toString(expected);
}
}
驾驶员等级
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;
import javax.swing.*;
public class Driver extends MathProblems {
MathProblems problems = new MathProblems();
Scanner textfile;
String s = "Welcome Students!";
String b = "Start!";
private JFrame f;
private JPanel p;
JFrame frame = new JFrame();
JButton b1 = new JButton(b);
JLabel jl = new JLabel(s);
int i;
private int clicked;
public Driver() {
gui();
}
public void gui() {
f = new JFrame("Flash Card Program");
p = new JPanel();
f.setLayout(new GridLayout(2, 1));
f.add(jl);
f.add(p);
p.setLayout(new GridLayout(2, 1));
p.add(b1);
jl.setHorizontalAlignment(JLabel.CENTER);
// pack the frame for better cross platform support
f.pack();
// Make it visible
f.setVisible(true);
f.setSize(500, 400); // default size is 0,0
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (b1.getText().equals("Click For Answer")) {
jl.setText(problems.toString());
b = "Next Question";
b1.setText(b);
} else {
problems.run();
jl.setText(problems.getQuestion());
b = "Click For Answer";
b1.setText(b);
}
}
});
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (clicked++ == 10) {
Object[] options = { "No, thanks", "Yes, please" };
int response = JOptionPane.showOptionDialog(frame,
"Would you like more math questions? ",
"Math Questions", JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE, null, options,
options[1]);
if (response == 1)
clicked = 0; // reset
else
System.exit(0);
}
}
});
}
static void filereader(Scanner textfile) {
int i = 0;
int sum = 0;
while(i <= 19)
{
int nextInt = textfile.nextInt();
System.out.println(nextInt);
sum = sum + nextInt;
i++;
}
}
public static void main(String[] args) throws IOException {
EventQueue.invokeLater(new Runnable() {
public void run() {
new Driver();
Scanner textfile = null;
try {
textfile = new Scanner(new File("upload.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
filereader(textfile);
}
});
}
}
在
filereader
方法中,循环中有以下行:
int nextInt = textfile.nextInt();
但是,您显示的示例文本在数字之间包含“+”字符,我看不到任何代码可以考虑这一点
要修复此问题,您可以将“+”定义为
Scanner
对象上的分隔符,或者确保循环将其读取为字符串 您需要为a和b中的每一个定义问题值的全局向量。一种更好的方法是定义一个名为“OneProblem”的类,该类包含A、b和op的成员。创建一个“向量”,在读取文件时,为源代码的每一行创建一个OneProblem对象。然后,在运行时,您要么选择一个随机数学问题,要么遍历所有OneProblem对象,要么从随机数生成器生成一个完全随机的OneProblem。比如:
class OneProblem {
public int a = 0;
public int b = 0;
public int op = 0;
public OneProblem(int _a, int _op, int _b) {
a =_a;
b = _b;
op = _op;
}
}
class MathProblems {
Vector<OneProblem> problems = new Vector<OneProblem>();
//...lot of your other code here as well....
workQuestion(OneProblem problem) {
switch (problem.op) {
case 0:
add(problem.a, problem.b);
break;
case 1:
subtract(problem.a, problem.b);
break;
case 2:
multiply(problem.a, problem.b);
break;
case 3:
divide(problem.a, problem.b);
break;
}
}
}
填写“询问问题”的适当方法。这在上面表示为一个循环,但您可能想随机选取一个测试值来表示?然后在该范围内为i选择一个合理的随机值,并从向量中找出问题。那么问题到底是什么?您当前是否收到错误消息?如果是这样的话,你能发布那个错误吗?我们是否应该查看代码的特定部分?是的,是上载.txt文件的方法。我试图将这些问题添加到txt文件中,而不是运行随机的数学问题。如果文件存在。我知道filereader方法不正确。我不想做任何数学运算,我只想用这些问题来代替随机数学类中控制的随机数学。我不清楚你想要什么,但是你已经告诉你的程序从文件中读取了一堆整数,并且你发布了一个输入文件,其中包含除整数以外的内容。试着看看这个类的javadoc,如果我把它改成1-10,我可以让它把那些整数设置成数学问题,比如1+1。好的,谢谢,这很有意义。我将txt文件改为显示1 2 3 4等。因此,如果我想说嘿,java程序,如果txt文件存在,请使用其中的整数并求和,否则正常运行程序,只生成随机数学问题。问题“单击以获取答案”回答“单击以获取下一个问题”等。此时,您需要一些代码来确定文件是否存在并采取适当的操作。有几种方法可以做到这一点,但我相信如果你想一想,看看当你试图为一个不存在的文件创建一个
扫描仪时会发生什么,你会找到答案的。好的,明白了。所以基本上if是txt文件中的int,else是我当前的随机数学问题?那么这将在MathProblems类的public void run方法中完成?我已经填写了“workProblems”方法来向您展示如何使用该对象,并重命名了该类“OneProblems”,因为以前的名称与您的主类太接近。嘿,谢谢您的帮助,我只是想让你知道我正在用你的解释来做这件事。顺便问一下,op指的是什么?成员'op'包含整数,其中0代表'add',1代表'subtract'等等。{random op}
底部是伪代码,表示应该使用某种机制来选择随机数学运算:+,-,*,/或其他任何形式。如果这对您有效,请选中“接受答案”复选标记。
class OneProblem {
public int a = 0;
public int b = 0;
public int op = 0;
public OneProblem(int _a, int _op, int _b) {
a =_a;
b = _b;
op = _op;
}
}
class MathProblems {
Vector<OneProblem> problems = new Vector<OneProblem>();
//...lot of your other code here as well....
workQuestion(OneProblem problem) {
switch (problem.op) {
case 0:
add(problem.a, problem.b);
break;
case 1:
subtract(problem.a, problem.b);
break;
case 2:
multiply(problem.a, problem.b);
break;
case 3:
divide(problem.a, problem.b);
break;
}
}
}
if (problems.size()>0) {
for (int i=0; i<problems.size(); i++) {
OneProblem selProblem = problems.get(i);
workQuestion(selProblem);
}
}
else {
workQuestion(new OneProblem({{random a}}, {{random op}}, {{random b}}));
}