如何找到存储在字符串数组中的整数总和以及 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)的方法玩。