2014-11-18 2 views
0

Я работаю над назначением, в котором я использую сканеры для чтения строк и токенов .txt-файла. Мне нужно сделать некоторые преобразования и переставить несколько строк, которые я сделал с помощью некоторых вспомогательных методов. Проблема в том, что код работает только для каждой другой строки, которую он читает из файла. Я думаю, что, возможно, я что-то испортил где-то в начале кода. Любые подсказки или подсказки о том, что мне нужно будет изменить? Вот что у меня есть thusfar:Программа, по-видимому, читает каждую строку .txt-файла

public static void main(String[] args) throws FileNotFoundException { 
    Scanner input = new Scanner(new File("PortlandWeather2013.txt")); 
    while (input.hasNextLine()) { 
     String header = input.nextLine(); 
     System.out.println(header); 

     Scanner input2 = new Scanner(header); 

     while (input2.hasNextLine()){ 
      String bottomHeader = input.nextLine(); 
      System.out.println(bottomHeader); 

      String dataLines = input.nextLine(); 

      Scanner linescan = new Scanner(dataLines); 

      while (linescan.hasNext()){ 

       String station = linescan.next(); 
       System.out.print(station+ " "); 

       String wrongdate = linescan.next(); 
       String year = wrongdate.substring(0,4) ; 
       String day = wrongdate.substring(6); 
       String month = wrongdate.substring(4,6); 

       System.out.print(month + "/" + day + "/" + year); 

       double prcp = linescan.nextDouble(); 
       System.out.print("\t "+prcpConvert(prcp)); 

       double snwd = linescan.nextDouble(); 
       System.out.print("\t " + snowConvert(snwd)); 

       double snow = linescan.nextDouble(); 
       System.out.print("\t" + snowConvert(snow)); 

       double tmax = linescan.nextDouble(); 
       System.out.print("\t" + tempConvert(tmax)); 

       double tmin = linescan.nextDouble(); 
       System.out.println("\t" + tempConvert(tmin)); 


      } 

     } 
    } 
} 

public static double prcpConvert(double x){ 

    double MM = x/1000; 
    double In = MM * 0.039370; 
    double rounded = Math.round(In * 10)/10; 
    return rounded; 


} 
public static double snowConvert(double x){ 
    double In = x * 0.039370; 
    double rounded = Math.round(In * 10)/10; 

    return rounded; 
} 

public static double tempConvert(double x){ 
    double celsius = x/10; 
    double fahrenheit = (celsius *9/5)+32; 
    double rounded = Math.round(fahrenheit *10)/10; 

    return rounded; 
} 
+0

Почему вы создаете новый объект Scanner для простых строк? – Andrew121007

+0

Также, пожалуйста, разместите содержимое PortlandWeather2013 и то, что ваше приложение должно делать. Без этой информации мы не сможем помочь вам, кроме синтаксических ошибок. – Andrew121007

ответ

0

nextLine() не просто принести последнюю строку, она также продвигает линию. Перед вторым циклом вы вызываете nextLine() дважды, заставляя вас продвигать две линии на каждую итерацию цикла.

Вы можете исправить эту проблему, установив dataLines = bottomHeader вместо того, чтобы снова звонить по телефону nextLine().