2012-11-29 156 views
0

我有一个值列表(天气数据),编写列表的人在没有值的情况下使用值“9999”进行报告。我导入的文本文件,并使用下面的代码来获取数据,并对其进行编辑:双打列表打印字符串

import java.io.*; 
import java.util.*; 

public class weatherData { 

public static void main(String[] args) 
     throws FileNotFoundException{ 
    Scanner input = new Scanner(new File("PortlandWeather2011.txt")); 
    processData(input); 
} 

public static void processData (Scanner stats){ 
    String head = stats.nextLine(); 
    String head2 = stats.nextLine(); 
    System.out.println(head); 
    System.out.println(head2); 
    while(stats.hasNextLine()){ 
     String dataLine = stats.nextLine(); 
     Scanner dataScan = new Scanner(dataLine); 
     String station = null; 
     String date = null; 
     double prcp = 0; 
     double snow = 0; 
     double snwd = 0; 
     double tmax = 0; 
     double tmin = 0; 
     while(dataScan.hasNext()){ 
      station = dataScan.next(); 
      date = dataScan.next(); 
      prcp = dataScan.nextInt(); 
      snow = dataScan.nextInt(); 
      snwd = dataScan.nextInt(); 
      tmax = dataScan.nextInt(); 
      tmin = dataScan.nextInt(); 
      System.out.printf("%17s %10s %8.1f %8.1f %8.1f %8.1f %8.1f \n", station, date(date), prcp(prcp), inch(snow), inch(snwd), temp(tmax), temp(tmin)); 
     } 
    } 

} 
public static String date(String theDate){ 
    String dateData = theDate; 
    String a = dateData.substring(4,6); 
    String b = dateData.substring(6,8); 
    String c = dateData.substring(0,4); 
    String finalDate = a + "/" + b + "/" + c; 
    return finalDate; 

} 

public static double prcp(double thePrcp){ 
    double a = (thePrcp * 0.1)/25.4; 
    return a; 
} 

public static double inch(double theInch){ 
    double a = theInch/25.4; 
    if(theInch == 9999){ 
     a = 9999; 
    } 
    return a; 
} 


public static double temp(double theTemp){ 
    double a = ((0.10 * theTemp) * 9/5 + 32); 
    return a; 
} 
} 

我有走的是价值和检查所有的时间“9999”的问题出现了,并打印出“ ----”。我不知道如何获取double类型的值,并打印出一个String。

这段代码取值9999,并且不做任何事情。这是我的问题所在:

public static double inch(double theInch){ 
    double a = theInch/25.4; 
    if(theInch == 9999){ 
     a = "----"; 
    } 
    return a; 
} 

如果我在这个问题中提供了大量信息,我很抱歉。如果你需要我澄清就问。谢谢你的帮助!

+0

您有什么错误? – user962206

+0

@ user962206呃......希望你知道最后一段代码片段中有什么问题。如果你不......呃... ... – Doorknob

回答

6

您需要修改inch函数才能返回一个字符串,而不是double。

public static String inch(double theInch){ 
    if(theInch == 9999){ 
     return "----"; 
    } 
    return Double.toString(theInch/25.4); 
} 
+0

谢谢,由于某种原因,我忘记了类型铸造。 :)很好的回答! –

2

我想第一个问题可能是你正在阅读从Scanner所有值int,而不是double秒。例如,根据您的System.out.println()发言,我想你实际上应阅读下面的数据类型...

 prcp = dataScan.nextDouble(); 
     snow = dataScan.nextDouble(); 
     snwd = dataScan.nextDouble(); 
     tmax = dataScan.nextDouble(); 
     tmin = dataScan.nextDouble(); 

而且,看到虽然inch()方法只会在System.out.println()线使用,您将需要将其更改为String作为返回类型...

public String inch(double theInch){ 
    if (theInch == 9999){ 
     return "----"; 
    } 
    return ""+(theInch/25.4); 
}