输入:公共静态无效主(String[]args)抛出IOExcture{
File gameScores = new File("C:\\Users\\jaret\\OneDrive\\Desktop\\GameScores.csv");
if (gameScores.exists())
{
BufferedReader br = null;
String line = "";
String csvSplitBy = ",";
br = new BufferedReader(new FileReader(gameScores));
System.out.println("----------------------------------------------------------");
System.out.println("-------------------------------------");
System.out.println("Games Report");
System.out.println("----------------------------------------------------------");
System.out.println("-------------------------------------");
System.out.println("Gamer 1 2 3 4 5 6 7");
System.out.println(" 8 9 10 Total");
System.out.println("----------------------------------------------------------");
System.out.println("-------------------------------------");
while ((line = br.readLine()) != null)
{
String list[] = new String[10];
list = line.split(csvSplitBy);
int sum = 0;
for(String element:list) {
try {
Integer num = Integer.parseInt(element);
sum += num;
}
catch (NumberFormatException nfe) {
System.out.println(list[0] + "\t"
+ list[1] + (list[1].length() > 10 ? "\t" : "\t")
+ list[2] + (list[2].length() > 10 ? "\t" : "\t")
+ list[3] + (list[3].length() > 10 ? "\t" : "\t")
+ list[4] + (list[4].length() > 10 ? "\t" : "\t")
+ list[5] + (list[5].length() > 10 ? "\t" : "\t")
+ list[6] + (list[6].length() > 10 ? "\t" : "\t")
+ list[7] + (list[7].length() > 10 ? "\n\t" : "\n\t")
+ list[8] + (list[8].length() > 10 ? "\t" : "\t")
+ list[9] + (list[9].length() > 10 ? "\t" : "\t")
+ list[10] + "\t" + sum);
}
}
}
System.out.println("----------------------------------------------------------");
System.out.println("----------------------------------------------------------");
br.close();
}
在代码中,列表
中的第一个元素
是名称,它不是一个数字,因此您将获得NumberFormatException。在这个例子中,sum是0,catch为你打印0作为sum。
如果您想打印正确的总和,您应该删除捕获中的打印总和,并将其放在for循环之外。如下:
while ((line = br.readLine()) != null)
{
String list[] = new String[10];
list = line.split(csvSplitBy);
int sum = 0;
for(String element:list) {
try {
Integer num = Integer.parseInt(element);
sum += num;
}
catch (NumberFormatException nfe) {
System.out.println(list[0] + "\t"
+ list[1] + (list[1].length() > 10 ? "\t" : "\t")
+ list[2] + (list[2].length() > 10 ? "\t" : "\t")
+ list[3] + (list[3].length() > 10 ? "\t" : "\t")
+ list[4] + (list[4].length() > 10 ? "\t" : "\t")
+ list[5] + (list[5].length() > 10 ? "\t" : "\t")
+ list[6] + (list[6].length() > 10 ? "\t" : "\t")
+ list[7] + (list[7].length() > 10 ? "\n\t" : "\n\t")
+ list[8] + (list[8].length() > 10 ? "\t" : "\t")
+ list[9] + (list[9].length() > 10 ? "\t" : "\t")
+ list[10] + "\t");
}
}
System.out.println(sum)
}
虽然我不认为用这种方式处理它是一个好主意,在catch exception块中打印值。
更好的解决方案可能像下面这样,在这里您从索引1迭代列表到末尾。第一个索引元素是name。这样,您将避免不必要的异常处理。并在for循环外打印。
还删除了不想要的车工操作员。
while ((line = br.readLine()) != null)
{
String list[] = new String[10];
list = line.split(csvSplitBy);
int sum = 0;
for(int i =1; i< list.length; i++) {
Integer num = Integer.parseInt(list[i]);
sum += num;
}
System.out.println(list[0] + "\t"
+ list[1] + "\t"
+ list[2] + "\t"
+ list[3] + "\t"
+ list[4] + "\t"
+ list[5] + "\t"
+ list[6] + "\t"
+ list[7] + "\t"
+ list[8] + "\t"
+ list[9] + "\t"
+ list[10] + "\t" + sum);
}
如果java 8是好的,那么你可以使用一个更新的方法:
final Path path = Paths.get("path/to/your/file");
final List<String> lines = Files.readAllLines(path);
int sum = 0;
try {
sum = lines.stream()
.map(line -> line.split(","))
.flatMap(Arrays::stream)
.mapToInt(Integer::parseInt)
.sum();
} catch (Exception ex) {
// do something with exception
}
lines.forEach(System.out::println);
System.out.println(sum);
如果文件较大,则播放文件。行(路径)
方法。
问题内容: 这两个命令有什么区别? 我想存储约500万个整数,并且希望以最有效的方式进行存储。 问题答案: 不,没有区别;两者都存储为字符串。从redis.io: Redis列表只是字符串列表,按插入顺序排序。 根据您的用法,您可能需要考虑使用set而不是列表。
问题内容: System.out.print(“Name : “); String name = in.nextLine(); 输出将是: 名称:测试 年龄:20 建立成功 当我调试它们时,它不会读取“ city”的用户输入。但是,当我将“年龄”的数据类型更改为字符串时,它将读取。我如何在读取城市用户输入的系统中将age的数据类型保持为整型? 问题答案: 读取年龄后,由于缓冲区中仍然有换行符,请将
我已经声明了一个实现可比较接口和compareTo方法的类,使用employee ID比较两个员工。创建的类对象插入数组列表。现在,当我使用collections.sort(arrayList对象)时,它工作得很好。我对collective和comparator接口之间的比较有何不同感到困惑。我想知道如何在纯粹由数字组成的employee id字符串和其他字符串employee id之间进行比较,
问题内容: 我是一名刚从C ++转到Java的学生。 在Java中,为String和Char数组定义单独的数据类型的主要原因可能是什么? 两者有什么区别? 由于我只学习过C ++,所以直到现在我仍对它们有同感。请尽可能澄清。 问题答案: 是一成不变的。数组不是。字符串是在下面用char数组实现的,但是每次您尝试对其进行修改(例如,使用串联,替换等)时,它都会为您提供一个 新 对象。 因此,它表现为
问题内容: 我有一个,我想将其拆分为, 此拆分代码应适用于所有输入之王,例如ab123456和acff432等。如何拆分这种字符串。可能吗? 问题答案: 您可以尝试拆分像的正则表达式。试试这个: 将输出 您可以使用解析数字字符串为Integer 。
我正在写一个简单的井字游戏,需要在轮到他们的时候接受用户输入。玩家应该简单地提供一组坐标来放置他们的令牌(1,1)到(3,3)。我应该能够接受输入为“2 1”或“2,1”或“2,1”。所以我需要能够获取他们的字符串输入并提取两个数字中的每一个,而不管分隔符如何,并使用它们将他们的令牌分配给3x3数组中的指定单元格。 主要的问题是只能利用我们已经学过的东西(这是Java的第一节)。这是构建Java程