因此,我正在研究保龄球计算器任务,该任务需要一系列输入并计算得分。我的老师提供的测试输入包含许多测试用例,这些用例表示需要计算多少个字符串才能得分。我遇到的问题是我无法将所有3个字符串(有3个测试用例)放入一个单独的字符串中,并在不同的行上分开。
这是输入:
3 -,-,-,-,-,-,-,-,-,-
X,X,X,X,X,X,X,X,X,XXX
X,13,X,81,5 /,X,18,33,X,X36
我正在尝试将其设置为这样的格式:
-,-,-,-,-,-,-,-,-
X,X,X,X,X,X,X,X,X,XXX
X,13,X,81,5 /,X,18,33,X,X36
但是,当我运行代码时,将其作为输出:
-,-,-,-,-,-,-,-,-,- X,X,X,X,X,X,X,X,X,XXX X,13,X,81,5 /,X,18,33,X,X36
这是我到目前为止所掌握的。
import java.io.*;
import java.util.*;
public class Bowling {
public static void main(String[] args) throws FileNotFoundException {
File inFile = new File("input.txt");
Scanner scanFile = new Scanner(inFile);
int tc = scanFile.nextInt();
String N = "";
for (int i=0; i < tc; i++)
N += scanFile.next();
System.out.println(N);
}
}
**更新:谢谢大家的回答,由于您的回答,我学到了很多东西。在问这个问题时,我被这个问题束缚了,并没有直截了当。我再次查看代码,意识到我所要做的就是在将字符串添加到变量之前添加以下行:
N += "\n";
再次感谢所有发表评论的人。
答案 0 :(得分:3)
如果要使用大量的String
,我建议使用StringBuilder
。但是在循环的每次迭代中,您都可以添加换行符:
StringBuilder sb = new StringBuilder();
for (int i=0; i < tc; i++) {
sb.append(scanFile.next());
sb.append("\n");
}
System.out.println(sb);
答案 1 :(得分:1)
可以:
•创建一个String []数组
•使用分隔符,例如\ t
•使用其他方法
此外,别忘了说您要我们告诉您如何使用换行符。
答案 2 :(得分:1)
我很想在您的情况下使用StringJoiner,我完全同意@GBlodgett的回答。但这也可以作为替代。
在javadoc中,
StringJoiner用于构造分隔的字符序列 用定界符
这完全适合您的情况。您的循环显示为
StringJoiner sj= new StringJoiner("\n"); // Here, "\n" is the delimiter between every join.
for (int i=0; i < tc; i++){
sj.add(scanFile.next());
}
System.out.println(sj.toString());
此外,这避免了在最后添加的行之后添加不必要的换行符。
答案 3 :(得分:1)
我在您的代码中发现了一个错误,该错误解释了为什么输出在一行中。
命令System.out.println(N)应该在for循环内。 变量N是不必要的-请忽略它。
代码中还有另一个资源泄漏问题,因为从未关闭过扫描器。应该使用自动关闭机制(通过对资源语句使用try)关闭扫描器。
我提出以下代码来解决该问题:
public static void main(String[] args) throws FileNotFoundException {
File inFile = new File("input.txt");
try (Scanner sc = new Scanner(inFile)){
int tc = sc.nextInt();
for (int i=0; i < tc; i++) {
System.out.println(sc.next());
}
}
}