我已经为此苦苦挣扎了一段时间,尽管我认为那真的很简单哈哈。
一些背景信息:我正在制作一个小程序来自动回答网络调查(使用Selenium WebDriver)。每个调查都使用用户名和密码完成。我的目标是程序向我询问带有其ID(例如ID1:___,ID2:____等)的问题,并针对每个用户+通行证执行此操作。
我创建了一种从文本文件中获取用户名和密码并将其保存到String [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 );
}
仅对第一个用户有效。该程序会询问这四个问题的答案,然后打印出答案。之后,它只打印出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;
}
谢谢。
最佳答案
您无法阅读标准输入很多次。 Java不支持this1。
您可以做的是一次读取标准输入并将其全部捕获为String
。然后重复创建并使用StringReader
或Scanner
。
1 ....因为典型的操作系统不支持它。