Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
向程序添加数据(如果存在);否则会在java中生成随机数据_Java_Math_Random - Fatal编程技术网

向程序添加数据(如果存在);否则会在java中生成随机数据

向程序添加数据(如果存在);否则会在java中生成随机数据,java,math,random,Java,Math,Random,我有一个显示随机数学问题的数学程序,当你点击查看下一个答案时,下一个答案就会出现 我添加了一个上传文件upload.txt的方法 我希望我的程序运行此文件中的数学问题,而不是运行随机 如果文件存在,则为数学问题。如果不是,我希望程序以当前方式运行,即运行随机数学问题 我当前添加文本文件的方法不是100%准确。 我不想把写在文件里的问题加进去。通过使用StackOverflow上另一个线程的代码将数字上传到命令提示符,我就成功了 随机数学问题课 import java.util.Random;

我有一个显示随机数学问题的数学程序,当你点击查看下一个答案时,下一个答案就会出现

我添加了一个上传文件upload.txt的方法

我希望我的程序运行此文件中的数学问题,而不是运行随机 如果文件存在,则为数学问题。如果不是,我希望程序以当前方式运行,即运行随机数学问题

我当前添加文本文件的方法不是100%准确。 我不想把写在文件里的问题加进去。通过使用StackOverflow上另一个线程的代码将数字上传到命令提示符,我就成功了

随机数学问题课

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}}));
}