【问题标题】:When writing to files, it writes the same integers instead of different integers写入文件时,它写入相同的整数而不是不同的整数
【发布时间】:2014-04-12 00:06:57
【问题描述】:

如果您需要任何解释,请随时提出。 EquationsAndAnswers 类的目标是生成 8 个数组、4 个字符串类型和 4 个双精度类型,并用加法方程填充它们,然后为每个基本数学运算符提供答案等。然后,从这 8 个数组中,它应该从四个字符串类型方程数组中的任何一个中随机选择方程,一次一个。在选择要写入的随机方程和相应的答案后,将它们写入文件(equations.txt)。 我的问题是,我从 Menu 类调用 writeBoth 方法后, equations.txt 文件如下所示:

6 + 10

6 + 10

8 - 9

8 - 9

6 + 10

8 - 9

6 + 10

而不是这样:

1+2

3-2

4*5

10÷2

我的班级菜单:

public class Menu {

    public static boolean additionBool = true;
    public static boolean subtractionBool = true;
    public static boolean multiplicationBool = true;
    public static boolean divisionBool = true;
    public static boolean doubleDigitBool = false;

    new EquationsAndAnswers().writeBoth();  
}

我的课 EquationsAndAnswers:

import java.util.Random;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JOptionPane;

public class EquationsAndAnswers {
/*Random Generators*/
    Random singleDigitNaturalGen = new Random();
    Random randomEquationPicker = new Random();
    Random doubleDigitNaturalGen = new Random();
public void writeBoth(){    



    /*Declaration of Four Basic Mathematic Operation Equation Arrays and Corresponding Answers*/
    String additionArrayEquation[] = new String[100];
    int additionArrayAnswers[] = new int[100];

    String subtractionArrayEquation[] = new String[100];
    int subtractionArrayAnswers[] = new int[100];

    String multiplicationArrayEquation[] = new String[100];
    int multiplicationArrayAnswers[] = new int[100];

    String divisionArrayEquation[] = new String[100];
    double divisionArrayAnswers[] = new double[100];

    String assortedEquations[] = new String[100];
    double assortedAnswers[] = new double[100];

    /*Population of Basic Operation Equation Arrays*/
    /*Population of Addition Equation and Answer Arrays*/
    for(int additionArrayGenerationX = 0; additionArrayGenerationX < additionArrayEquation.length; additionArrayGenerationX++){

        int tempAdditionY = singleDigitNaturalGen.nextInt(11), tempAdditionX = singleDigitNaturalGen.nextInt(11);
        int answer = tempAdditionY + tempAdditionX;
        String equation = (tempAdditionY + " + " + tempAdditionX); 
        additionArrayEquation[additionArrayGenerationX] = equation;
        additionArrayAnswers[additionArrayGenerationX] = answer;
    }



    /*Population of Subtraction Equation and Answer Arrays*/
    for(int subtractionArrayGenerationX = 0; subtractionArrayGenerationX < subtractionArrayEquation.length; subtractionArrayGenerationX++){

        int tempSubtractionY = singleDigitNaturalGen.nextInt(11), tempSubtractionX = singleDigitNaturalGen.nextInt(11);
        int answer = tempSubtractionY - tempSubtractionX;
        String equation = (tempSubtractionY + " - " + tempSubtractionX); 
        subtractionArrayEquation[subtractionArrayGenerationX] = equation;

        subtractionArrayAnswers[subtractionArrayGenerationX] = answer;
    }


    /*Population of Multiplication Equation and Answer Arrays*/
    for(int multiplicationArrayGenerationX = 0; multiplicationArrayGenerationX < multiplicationArrayEquation.length; multiplicationArrayGenerationX++){

        int tempMultiplicationY = singleDigitNaturalGen.nextInt(11), tempMultiplicationX = singleDigitNaturalGen.nextInt(11);
        int answer = tempMultiplicationY*tempMultiplicationX;
        String equation = ""; 
        multiplicationArrayEquation[multiplicationArrayGenerationX] = equation;

        multiplicationArrayAnswers[multiplicationArrayGenerationX] = answer;
    }



    /*Population of Division Equation and Answer Arrays*/
    for(int divisionArrayGenerationX = 0; divisionArrayGenerationX < divisionArrayEquation.length; divisionArrayGenerationX++){

        int tempDivisionY = singleDigitNaturalGen.nextInt(11), tempDivisionX = singleDigitNaturalGen.nextInt(11);
        double answer = ((double)tempDivisionY / (double)tempDivisionX);
        String equation = ""; 
        divisionArrayEquation[divisionArrayGenerationX] = equation;

        divisionArrayAnswers[divisionArrayGenerationX] = answer;
    }



    /*Deciding on Equations to be displayed.*/
    int i = 0;

    System.out.println(additionArrayEquation[0]);//dev

    /*This puts the equations in a random order in the assortedEquations array, in preparation to be written to the Equations.txt file*/        
    for(int epsilon = 0; epsilon < assortedEquations.length; epsilon++){    

        int equationType = randomEquationPicker.nextInt(4);

        if(equationType == 0){
            if(Menu.additionBool = true){
                assortedEquations[epsilon] = additionArrayEquation[i];
                assortedAnswers[epsilon] = additionArrayAnswers[i];
            }
            else{
                assortedEquations[epsilon] = "Bonus: Enter 0";
            }
        }

        else if(equationType == 1){
            if(Menu.subtractionBool = true){
                assortedEquations[epsilon] = subtractionArrayEquation[i];
                assortedAnswers[epsilon] = subtractionArrayAnswers[i];
            }

            else{
                assortedEquations[epsilon] = "Bonus: Enter 0";
            }
        }
        else if(equationType == 2){
            if(Menu.multiplicationBool = true){         
                assortedEquations[epsilon] = multiplicationArrayEquation[i];
                assortedAnswers[epsilon] = multiplicationArrayAnswers[i];
            }
            else{
                assortedEquations[epsilon] = "Bonus: Enter 0";
            }
        }   
        else{
            if(Menu.divisionBool = true){
                assortedEquations[epsilon] = divisionArrayEquation[i];
                assortedAnswers[epsilon] = divisionArrayAnswers[i];
            }
            else{
                assortedEquations[epsilon] = "Bonus: Enter 0";
            }
        }
    }


    /*Writing each equation to the file.*/
    try {
        BufferedWriter writeEquation = new BufferedWriter(new FileWriter("Equations.txt"));
        BufferedWriter writeAnswer = new BufferedWriter(new FileWriter("Answers.txt"));

        for(int theta = 0; theta < assortedEquations.length; theta++){
            writeEquation.write(assortedEquations[theta]+ "\n");
            writeAnswer.write(assortedAnswers[theta] + "\n");
        }



        writeEquation.close();
        writeAnswer.close();
    } catch (IOException e) {JOptionPane.showMessageDialog(null, "Whoops, there seems to have been an error. Sorry about that.");}
}
}

【问题讨论】:

  • "If you need any explanation, please feel free to ask..." -- 是的,请解释您的代码和问题。细节很重要。
  • 我添加了一些关于我的代码功能的更多细节,我无法更好地解释这个问题,因为我不知道我为什么会遇到它。对不起。
  • 我将删除我对附加信息的否决票,希望你能很快得到一个体面的答案,但至于我,我将等待更多信息,包括更详细的解释您当前的代码,包括方法应该做什么。此外,您尝试调试代码(包括使用调试器)向您展示了什么?
  • 我已经尝试注释掉它随机选择要添加到 assortedEquations 数组中的方程的部分,并且只打印每个单独的方程和答案数组,方程和答案似乎工作正常,所以它必须位于代码块中的某个位置,从注释“/*这将方程以随机顺序放入 assortedEquations 数组中,以准备写入 Equations.txt 文件*/”。此外,我已经删除了我认为无用的大部分代码,因为它只是使用两位数的相同内容,我还没有使用过。

标签: java for-loop file-io random


【解决方案1】:

如果不运行这个,我假设你只会得到"Bonus: Enter 0"

if(Menu.subtractionBool = true)
if(Menu.subtractionBool == true)

这两行之间有天壤之别。

【讨论】:

  • 不管怎样,这样做总是更好的,if (Menu.subtractionBool)
  • 我将条件更改为:"Menu.subtractionBool" 以实现良好的实践,但这并没有改变 equations.txt 文件中的任何内容。感谢您的建议。
【解决方案2】:

我发现了问题所在。我的旧代码如下:

int tempDivisionY = singleDigitNaturalGen.nextInt(11), tempDivisionX = singleDigitNaturalGen.nextInt(11);
double answer = ((double)tempDivisionY / (double)tempDivisionX);
String equation = ""; 

什么时候应该说:

String equation = tempDivisionY + " / " + tempDivisionX;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 2019-05-04
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多