当前位置: 首页 > 知识库问答 >
问题:

如何找到存储在字符串数组中的整数之和以及java中的字符串?我需要输出中的0是整数的和

丌官晔
2023-03-14

输入:公共静态无效主(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();
    }

共有2个答案

甄煜
2023-03-14

在代码中,列表中的第一个元素是名称,它不是一个数字,因此您将获得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);
            }
万乐逸
2023-03-14

如果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程