如何使用扫描仪在用户输入中使用书写器

时间:2019-09-02 19:45:53

标签: java

我正在尝试通过获取用户输入来创建文件。 例如,用户输入套数并将其写入文件,然后再写入两个用户输入。但是它不显示任何文件。 另外还有其他疑问,如何在文件中记录随机数?

我编写代码的目的是当用户选择2套和用户想要的套数时。例如,如果用户选择4和6,它将随机分别生成4个数字和6个数字。我知道如何使用随机,但只是不知道如何实现此目的以编写文件。

这些是我应该获得的示例输出

public static void main(String[] args) throws IOException {
Random rnd = new Random();
File file = new File("C://Users//Hyeon Jin Ryu//nums.txt");
FileWriter w = new FileWriter(file);
Scanner in = new Scanner(System.in);



System.out.println("Please enter numbers of sets: ");
int a = in.nextInt();


System.out.println("Please enter the size of two each sets");
int firstSet = in.nextInt();
int secondSet = in.nextInt();
int t = rnd.nextInt(firstSet);
int k = rnd.nextInt(secondSet);


w.write(a);
w.write(t);
w.write(k);
in.close();
w.flush();
w.close();

从代码中:

Log

}

1 个答案:

答案 0 :(得分:0)

您发布的代码不会输出与您提供的示例输出相近的任何内容。您应该真正注意调用的方法的实际作用。

  1. 您要向用户询问集合的数量,但仅扫描2个输入(已硬编码)。因此,第一个扫描程序输入是完全多余的。
  2. 获得奇怪字符的原因是因为FileWriter.write(int) writes one single character as stated in the documentation。否则,您应该使用字符串。
  

写入一个字符。要写入的字符包含在   给定整数值的16个低位; 16高阶   位将被忽略。

您需要使用w.write(String.valueOf(t))将整数解析为字符串,但是它仍然不会输出多个数字,因为您需要先循环代码。

  1. 以下代码不会生成X数量的数字,而只是从用户那里获得一个数字firstSet并将其设置为它将生成的最高随机数,即在文档或任何IDE中也显示了该问题:

    int firstSet = in.nextInt(); // if user enters 6
    int t = rnd.nextInt(firstSet); // generate random number from 0-6
    

因此,即使您确实解析了atk值,然后使用您提供的相同输入(2、5、10),它也会:

  • 询问2套,与用户输入无关
  • 生成0-5之间的随机数
  • 生成介于0到10之间的随机数
  • 将它们写入没有空格或换行符的文件中,因此最终会得到类似245的内容。

您想向用户询问集合的数量,将其存储为变量,并创建一个循环,循环的次数与变量中的值相同,并生成X数量的集合和Y数量的随机数。如果是2套大小分别为5和10的代码,则您的代码将需要分别循环5和10次以生成5和10随机数,并重复整个过程2次。

以下代码产生您正在描述的结果。请注意rnd.nextInt()是如何受2500约束的,第二个for循环如何运行与用户提供的集合大小一样多的次数,然后在嵌套的for循环中再次为提供的集合数量运行所有内容。

对于FileWriter,它还使用try-with-resources处理代码中的异常,而不是将其传递回JVM以使其崩溃,其次用于自动关闭FileWriter流。

public static void main(String[] args) {
    Random rnd = new Random();
    File file = new File("nums.txt");

    try (FileWriter w = new FileWriter(file)) {
        Scanner in = new Scanner(System.in);
        StringBuilder setResult = new StringBuilder();

        System.out.println("Please enter the number of sets: ");
        int n = in.nextInt();

        System.out.println("Please enter the size of each set: ");
        for (int j = 0; j < n; j++) {
            int setSize = in.nextInt();

            for (int k = 0; k < setSize; k++) {
                int randomNum = rnd.nextInt(2500);
                setResult.append(randomNum).append(" ");
            }
            setResult.append("\n");
        }
        w.write(setResult.toString());
        in.close();

    } catch (IOException e) {
        e.printStackTrace();
    }
}

生成的文件写得很好,并包含:

699 494 1611 1521 2042 
2478 500 177 1602 348 231 1191 
842 421 93 1229 1804 802 1845 2245 836