无法打印文本文件中行的最后一个值

时间:2017-02-25 04:41:13

标签: java split

我需要从关于汽车的文本文件(类型,注册号等)打印信息,并且不能让它打印汽车座位数的值。其余信息在打印到终端时工作正常。

运行程序时,我们使用命令行参数。

文本文件如下所示:

EL EK43536 31.5  
LASTEBIL SR87875 452.5 2550.4  
PERSONBIL AR34345 119.5 8  
EL EL14545 60  
PERSONBIL DK65437 135.7 4

最后一个PERSONBIL的结果如下:

Type motorvogn: PERSONBIL  
Registreringsnummer: DK65437  
CO2-utslipp maalt i g/km: 135.7  
Antall godkjente seter: 0

我想问题是int ord4 = 0和带有ord4的if语句。它应打印出8和4的座位数,但在运行时它只显示0.文本文件的其余部分打印出来是正确的。

private static ArrayList<Bil> filleser(String filnavn){
  String linje = "";
  ArrayList<Bil> bilene = new ArrayList<Bil>();

  try{
    BufferedReader lesFil = new BufferedReader(new FileReader(filnavn));

    while((linje = lesFil.readLine()) != null){
      String[] split = linje.split(" ");

      String type = split[0];
      String ord = split[1];
      double ord2 = 0;
      double ord3 = 0;
      int ord4 = 0;

      if(split.length > 2){
        ord2 = Double.parseDouble(split[2]);
      } if(split.length > 3){
        ord3 = Double.parseDouble(split[3]);
      } if (split.length > 4){
        ord4 = Integer.parseInt(split[4]);
      }
      if(type.equals("BIL")){
        Bil bil = new Bil(split[0], ord);
        bilene.add(bil);
      } else if (type.equals("EL")){
        Elbiler bil = new Elbiler(type, ord, ord2);
        bilene.add(bil);
      } else if (type.equals("FOSSIL")){
        Fossilbiler bil = new Fossilbiler(type, ord, ord2);
        bilene.add(bil);
      } else if (type.equals("LASTEBIL")){
        Lastebiler bil = new Lastebiler(type, ord, ord3, ord2);
        bilene.add(bil);
      } else if (type.equals("PERSONBIL")){
        Personbiler bil = new Personbiler(type, ord, ord2, ord4);
        bilene.add(bil);
      } else {
        System.out.println("Error, ikke gyldig bil.");
      }
    }
    lesFil.close();
    }
    catch(Exception e){
      System.out.println("Error: Noe galt med fil eller no'.");
      System.exit(0);
    }
    return bilene;
  }

1 个答案:

答案 0 :(得分:0)

你没有将ord3传递给PERSONBIL ...这是你在文本行上的第四个标记。相反,您传递的是ord4,这是一个不存在的第五个令牌。

更改

 Personbiler bil = new Personbiler(type, ord, ord2, ord4);

 Personbiler bil = new Personbiler(type, ord, ord2, ord3 );

如果您的方法签名需要int,请使用:

 Personbiler bil = new Personbiler(type, ord, ord2, (int)ord3);