我完全被困了几个小时。
说我想要扫描一个程序,例如
// my program in C++
#include <iostream>
/** playing around in
a new programming language **/
using namespace std;
int main ()
{
cout << "Hello World";
cout << "I'm a C++ program"; //use cout
return 0;
}
我想通过此输入并将其保存在ArrayList<String>
这是我的代码:
public static void main(String[] args) {
ArrayList<String> testCase = new ArrayList<String>();
int count = 0;
Scanner s = new Scanner(System.in);
testCase.add(s.nextLine());
while (s.hasNext() && s.next().length() > 1) {
testCase.add(s.nextLine());
}
System.out.println("\n\n\n\n----------------Output from loop------------------");
for (String tc : testCase) {
System.out.println(tc);
}
}
输出:
----------------Output from loop------------------
// my program in C++
<iostream>
playing around in
如果连续出现2个空行,则扫描应该停止。
非常感谢任何帮助。
答案 0 :(得分:0)
您的代码中的问题是您在条件中使用s.next()
。此方法使用下一个令牌,该令牌不能再被使用。
我不知道s.next().length() > 1
要检查的是什么,但是如果你删除那部分条件,你将消费每一行而没有任何问题。
以下代码将扫描每一行,并在满足两个连续的空行时停止:
public static void main(String[] args) throws Exception {
System.setIn(new FileInputStream("C:\\Users\\Simon\\Desktop\\a.txt"));
ArrayList<String> testCase = new ArrayList<String>();
int emptyLines = 0;
String line;
Scanner s = new Scanner(System.in);
testCase.add(s.nextLine());
while (s.hasNext() && emptyLines < 2) {
line = s.nextLine();
if (line.isEmpty()) {
emptyLines++;
} else {
emptyLines = 0;
}
testCase.add(line);
}
System.out.println("\n\n\n\n----------------Output from loop------------------");
for (String tc : testCase) {
System.out.println(tc);
}
}