微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数组上的迭代器循环在最后一个字段Java之后再次从字段 0 开始

如何解决数组上的迭代器循环在最后一个字段Java之后再次从字段 0 开始

这是一个简单的逻辑,将 BufferedReader 读取的 csv 的标头(第一行)字段(黄色,请参见下面的屏幕截图)与该给定数组的字段进行比较:

static String[] HEADER_VALUE = {"Time","Table Accel X","Table Accel Y","Table Accel Z","Table Gyro X","Table Gyro Y","Table Gyro Z","Table Temp","Nozzle Accel X","Nozzle Accel Y","Nozzle Accel Z","Nozzle Gyro X","Nozzle Gyro Y","Nozzle Gyro Z","Nozzle Temp"};

cvs file marked up in excel

这是我的代码

private void validateFieldCount(BufferedReader br) {
        
        String separator = ",";
        String line;
        Integer lineNumber = 0;
        try{
            while ((line = br.readLine()) != null){
                lineNumber = lineNumber + 1;
                String fields[] = line.split(separator);
                if (lineNumber.equals(1)){
                    for (int itemCount = 0; itemCount < 10; itemCount++)
                    try{                    
                        if (fields[itemCount].equals(HEADER_VALUE[itemCount])){ 
                            System.out.println(itemCount + " | " + "ok    " + " | " + fields[itemCount] + " | " + HEADER_VALUE[itemCount]);                     
                        }
                        else
                            System.out.println(itemCount + " | " + "not ok!" + " | " + fields[itemCount] + " | " + HEADER_VALUE[itemCount]);
                    
                    } catch (Exception e) {
                        throw new RuntimeException("MetaDataFile header check error");}
                    }
        } catch (IOException e) {
            throw new RuntimeException("sendorDataFile field error");
    }
}

这是输出

0 | ok     | Time | Time
1 | ok     | Table Accel X | Table Accel X
2 | ok     | Table Accel Y | Table Accel Y
3 | ok     | Table Accel Z | Table Accel Z
4 | ok     | Table Gyro X | Table Gyro X
5 | ok     | Table Gyro Y | Table Gyro Y
6 | ok     | Table Gyro Z | Table Gyro Z
7 | ok     | Table Temp | Table Temp
8 | ok     | Nozzle Accel X | Nozzle Accel X
9 | ok     | Nozzle Accel Y | Nozzle Accel Y
10 | ok     | Nozzle Accel Z | Nozzle Accel Z
11 | ok     | Nozzle Gyro X | Nozzle Gyro X
12 | ok     | Nozzle Gyro Y | Nozzle Gyro Y
13 | ok     | Nozzle Gyro Z | Nozzle Gyro Z
14 | ok     | Nozzle Temp | Nozzle Temp
0 | not ok! | 03816794 | Time
1 | not ok! | 26.339623206637313 | Table Accel X
2021-03-23 21:16:12.898 ERROR 5232 ---[ctor-http-nio-3] r.n.channel.ChannelOperationsHandler     [id: 0x93cabbee,L:/[0:0:0:0:0:0:0:1]:8080 - R:/[0:0:0:0:0:0:0:1]:51837] Error was received while reading the incoming data. The connection will be closed.

问题是:为什么它会在第 14 个字段后再次从 0 开始计数(并将第 16 行的值放入 fields[] --> 参见 csv 图片上的红色突出显示值) ? 然后它在输出的最后一行抛出运行时错误

此外,当我将 HEADER_VALUE.length 替换为例如10 它将给出 12 行的输出,最后 2 行“不行!”行 + 运行时错误

非常感谢您的想法!

解决方法

大括号不平衡? 外部 catch 之前的右括号对应于 while 语句之后的左括号,而不是外部 try 之后的左括号。

由于显而易见的原因,我无法对此进行进一步调查。我希望这是您的解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。