【问题标题】:Read from standard input several times in Java在 Java 中多次读取标准输入
【发布时间】:2018-01-03 06:28:02
【问题描述】:

我已经为此苦苦挣扎了一段时间,虽然我认为这真的很简单哈哈。

一点背景信息:我正在制作一个小程序来自动回答网络调查(使用 Selenium WebDriver)。每个调查都是在用户名和密码下完成的。我的目标是我的程序用他们的 ID(如 ID1:___、ID2:____ 等)询问我的问题,并为每个用户 + 通行证这样做。

我创建了一种从文本文件中获取用户和密码并将它们保存到字符串列表[2] 中的方法。

    // Just a test list with the name (or id) of each question
    List<String> nombrePreguntas = new LinkedList<String>(Arrays.asList("nombre1", "nombre2", "nombre3", "nombre4"));

    // read users from file -> usuarios[0] = user, usuarios[1] = pass.
    List<String[]> usuarios = leerUsuarios("entrada.txt");

    for (String[] u : usuarios) {
        // print each user and pass
        System.out.println(u[0] + " - " + u[1]);
        // for each user+pass, read the questions and ask for their answer in stdin
        List<Integer> respuestas = leerRespuesta(nombrePreguntas);
        System.out.println(respuestas );
    }

这仅适用于第一个用户。程序要求回答 4 个问题,然后打印出答案。之后,它只打印 user+pass 以及每个问题的名称和一个空的答案数组,如下所示:

usuario1 - pass1
nombre1: 1
nombre2: 2
nombre3: 3
nombre4: 4
[1, 2, 3, 4]
usuario2 - pass2
nombre1: nombre2: nombre3: nombre4: []
usuario3 - pass3
nombre1: nombre2: nombre3: nombre4: []

我不知道做我想做的事最好的方法是什么。如果您找不到解决方案,我也将不胜感激有关替代方法的一些建议,以从标准输入中获取每个用户的答案+通过。

这是从标准输入读取的函数:

public static List<Integer> leerRespuesta(List<String> nombrePreguntas) {
    List<Integer> respuestas = new ArrayList<Integer>();
    Scanner in = new Scanner(System.in);
    // Para cada pregunta, habrá una respuesta
    boolean licencia = true;
    for (String np : nombrePreguntas) {
        // just a feature that I must implement
        if(licencia == false && (np.equals("LM2") || np.equals("LM3") || np.equals("LM4"))) {
            continue;
        }

        // Print the name/id of the question
        System.out.print(np + ": ");

        if(in.hasNextLine()) {
            String s = in.nextLine();

            while(!StringUtils.isNumeric(s)) {
                System.out.println("It must be a number.");
                System.out.print(np + ": ");
                if(in.hasNextLine())
                    s = in.nextLine();
            }

            if(np.equals("LM1") && s.equals("1"))
                licencia = false;

            respuestas.add(Integer.parseInt(s));
        }
    }
    in.close();
    return respuestas;
}

谢谢。

【问题讨论】:

  • 您是否要堆叠调查结果?
  • 我不确定我是否理解您的意思(英语不是我的主要语言)。但这就是我想要做的:我想连续回答很多调查,并将他们的答案保存在列表或文本文件中,这样之后我就可以执行一个询问用户、通过和列表的方法答案并将其应用于我阅读的每个用户+通行证和答案。
  • 一项调查旨在从一个人那里获取信息(或意见);即一个真正的人。 Jim 在问为什么您要编写一个程序来多次回答调查?
  • 哦,因为我已经物理回答了调查,我只需要在网络平台中输入结果,手动完成太繁琐了。我的意思是,无论如何我都必须手动完成,但我宁愿在一个简单的程序中一次完成所有这些操作,而不是整个网络表单,按 OK,登录等等。

标签: java stdin


【解决方案1】:

您无法多次读取标准输入。 Java 不支持这个1

可以做的是读取一次标准输入并将其全部捕获为String。然后重复创建并使用来自StringStringReaderScanner


1 .... 因为典型的操作系统不支持它。

【讨论】:

  • 哦,我有点搞砸了。好的,我会尝试,但你会建议我如何区分答案?我的意思是,每个调查有 140 个问题……我如何知道一个问题何时完成,另一个问题何时开始,并将它们“分配”给不同的用户?谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
  • 2018-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多