2014-03-31 66 views
0

我正在編寫一個程序,該程序通過天氣數據的.txt文件讀取,並且除其他外,可以保持一年中每天的各種天氣模式的計數。使用計數陣列來保持另一個陣列的計數

.txt文件有365行不同的值(一年中每一天的一行值)。每行包含高溫,低溫和天氣狀態(格式化爲六個1和0的String,其中1表示當天發生霧/雨/雪/冰雹/雷電/龍捲風)。例如,String 011000,表示發生了雨雪。

樣品氣象文件看起來像(換行符的間距):

高,低,天氣字符串:

45,32.4 100000

43.2,35,100001

50.2 ,32.1101101

我已經完成了通過weather.txt文件追蹤並記錄年度最高值和y值的絕大多數程序儘管較低,但對於每種類型(6種)的天氣狀況都有困難。我意識到我沒有盡力解釋,但我的目標是保持計數,對於所有365格式的字符串值,字符串的每個索引有多少個1。因此,在查看上面的示例天氣文件時,我的最終結果是[3,0,1,1,0,2]。

在下面的粘貼方法中,我傳入一個String array(我之前在程序中創建了一個String array,其中包含所有365個字符串格式的值... [100001,100000,101101,...])。在這種方法中,我創建了一個帶有6個值的新的tally array。我試圖編寫一個循環來跟蹤weather array(365值)的傳遞,如果在所述索引處出現1,則增加tally array index。最後的tally array看起來像[101,31,3,218,42,101] ...組成的樣本輸出數字。

這個邏輯給了我很多麻煩。假設我已經在解釋這件事上做了一些工作,任何人都可以給我提供建議。

注 - NUMBER_OF_WEATHER_TYPES的類常量被設置爲6

public static int[] getWeatherCounts(String[] weather) { 
    int[] tally = new int[6]; 

    for (int i = 0; i < weather.length; i++) { 
     for (int j = 0; j < NUMBER_OF_WEATHER_TYPES; j++) { 
      if (weather[j].charAt(j) == 1) { 
       tally[j]++; 
      } 
      return tally; 
     } 
    } 

    return tally; 
} 

整個程序上下文:

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

public class WeatherInfo {  
public static final int DAYS_PER_YEAR = 365; 
public static final int NUMBER_OF_WEATHER_TYPES = 6; 

public static void main (String[] args) { 
    String firstArgs = args[0]; 
    Scanner input = null; 

    if (args.length != 1) { 
     System.out.println("Error"); //Look more into this!!!! 
    } else { 
     try { 
      input = new Scanner(new File(firstArgs)); 

     } catch (FileNotFoundException e) { 
      System.out.println("Error: " + e); 
      System.exit(1); 
     } 
    } 

    String lineDiscard = input.nextLine(); 

    double[] highs = new double[DAYS_PER_YEAR]; 
    double[] lows = new double[DAYS_PER_YEAR]; 
    String[] weather = new String[DAYS_PER_YEAR]; 

    for (int i = 0; i < DAYS_PER_YEAR; i++) { 
     input.next(); 
     input.next(); 
     highs[i] = input.nextDouble(); 
     lows[i] = input.nextDouble(); 
     weather[i] = input.next(); 
    } 

    displayWeatherStatistics(highs, lows, weather); 

}  

public static void displayWeatherStatistics(double[] highs, double[] lows, String[] weather) { 
    double highTemp = Integer.MIN_VALUE; 
    double lowTemp = Integer.MAX_VALUE; 

    // for loop for highs 
    for (int i = 0; i < highs.length; i++) { 
     if (highs[i] > highTemp) { 
      highTemp = highs[i]; 
     } 
    } 

    // for loop for lows 
    for (int i = 0; i < lows.length; i++) { 
     if (lows[i] < lowTemp) { 
      lowTemp = lows[i]; 
     } 
    } 

    // printouts for the low and high temps of the year...need to fix this a bit 
    System.out.println("Highest Temp: " + highTemp + " (F)"); 
    System.out.println("Lowest Temp: " + lowTemp + " (F)"); 

    System.out.println(Arrays.toString(getWeatherCounts(weather))); 


} 

public static int[] getWeatherCounts(String[] weather) { 
    int[] tally = new int[6]; 


    for (int i = 0; i < weather.length; i++) { 
     for (int j = 0; j < NUMBER_OF_WEATHER_TYPES; j++) { 
      if (weather[i].charAt(j) == 1) { 
       tally[j]++; 
      } 
      return tally; 
     } 



    } 

    return tally; 
} 

}

+0

創建天氣對象 – arynaq

回答

2

嗯,這很難說沒有看到你的整個程序。但它看起來對我來說,

if (weather[j].charAt(j) == 1) { 
    tally[j]++; 
} 
return tally; 

應該

if (weather[i].charAt(j) == '1') { 
    tally[j]++; 
} 
// omit the return tally, we don't want to do that until the end 
+0

我編輯後在底部全部程序的補充。你的邏輯對我來說是有意義的,但是打印的輸出仍然在自動初始化版本中給我提示陣列... [0,0,0,0,0,0]。 – Rivers31334

+0

在getWeatherCounts中,您將在兩個不同的地方返回計數。刪除第一個。 – casperw

+0

有趣的是,我嘗試過,仍然沒有去。我的帳簿數組仍然從其創建的值[0 0 0 0 0 0]中讀取。 – Rivers31334