如何找到存储在字符串数组中的整数总和以及 java 中的字符串?我需要输出中的 0 是整数的总和
How do I find the sum of integers stored in a string array along with a string in java? I need the 0 in the output to be the sum of the integers
输入:
public static void main(String[] args) 抛出 IOException{
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();
}
游戏报道
玩家 1 2 3 4 5 6 7
8 9 10 总计
鲍勃 167 123 159 102 102 189 183
173 197 148 0
莎莉 189 130 138 113 159 116 134
196 150 144 0
马里奥 104 106 120 188 143 189 149
174 163 100 0
列夫 152 159 195 140 154 176 107
128 166 181 0
卡登 158 200 175 114 117 150 176
181 131 132 0
阿德利 175 199 122 104 198 182 175
153 120 165 0
拉达 161 108 102 193 151 197 115
137 126 186 0
泽维尔 178 171 147 113 107 129 128
189 165 195 0
拉菲 176 144 151 124 149 112 158
159 119 177 0
张 135 144 177 153 143 125 145
140 117 158 0
密歇根州 156 105 178 137 165 180 128
115 139 157 0
梅森 162 185 108 106 113 135 139
135 197 160 0
科拉 186 115 106 126 135 108 157
156 187 120 0
塞尔吉奥 117 105 115 116 193 200 176
134 122 153 0
乔纳斯 132 163 196 101 134 159 131
104 135 168 0
在您的代码中,list
中的第一个 element
是名称,它不是数字,因此您会收到 NumberFormatException。在那种情况下,sum 为 0,catch 为您打印 0 作为总和。
如果你想打印正确的总和,你应该去掉catch中的打印总和,把它放在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 异常块中打印值是个好主意。
更好的解决方案可能如下所示,从索引 1 到末尾遍历列表。作为第一个索引元素是名称。这样您将避免不需要的异常处理。并在 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);
如果文件很大,就用Files.lines(path)
的方法玩。
输入: public static void main(String[] args) 抛出 IOException{
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();
}
游戏报道
玩家 1 2 3 4 5 6 7 8 9 10 总计
鲍勃 167 123 159 102 102 189 183 173 197 148 0 莎莉 189 130 138 113 159 116 134 196 150 144 0 马里奥 104 106 120 188 143 189 149 174 163 100 0 列夫 152 159 195 140 154 176 107 128 166 181 0 卡登 158 200 175 114 117 150 176 181 131 132 0 阿德利 175 199 122 104 198 182 175 153 120 165 0 拉达 161 108 102 193 151 197 115 137 126 186 0 泽维尔 178 171 147 113 107 129 128 189 165 195 0 拉菲 176 144 151 124 149 112 158 159 119 177 0 张 135 144 177 153 143 125 145 140 117 158 0 密歇根州 156 105 178 137 165 180 128 115 139 157 0 梅森 162 185 108 106 113 135 139 135 197 160 0 科拉 186 115 106 126 135 108 157 156 187 120 0 塞尔吉奥 117 105 115 116 193 200 176 134 122 153 0 乔纳斯 132 163 196 101 134 159 131 104 135 168 0
在您的代码中,list
中的第一个 element
是名称,它不是数字,因此您会收到 NumberFormatException。在那种情况下,sum 为 0,catch 为您打印 0 作为总和。
如果你想打印正确的总和,你应该去掉catch中的打印总和,把它放在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 异常块中打印值是个好主意。
更好的解决方案可能如下所示,从索引 1 到末尾遍历列表。作为第一个索引元素是名称。这样您将避免不需要的异常处理。并在 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);
如果文件很大,就用Files.lines(path)
的方法玩。