2013-10-29 59 views
0

我正在編寫一個程序來計算熱指數,並且應該大量使用foreach循環。但是,當我打印到終端時,它不能正確顯示。我已經在這方面花了兩天時間,但我仍然無法找出爲什麼它仍然在做這件事。感謝您的任何幫助/建議!在這個foreach循環中,不希望的字符被打印在終端中

import java.util.Scanner; 
import java.io.File; 
import java.io.IOException; 

public class HeatIndex { 

    public static void main(String[] args) throws IOException { 
    Scanner keyWestHumidScan = new Scanner(new File("KeyWestHumid.txt")); 
    Scanner keyWestTempScan = new Scanner(new File("KeyWestTemp.txt")); 

    int counter1 = 0; 
    int counter2 = 0; 
    double[] keyWestHumid = new double[12]; 
    double[] keyWestTemp = new double[12]; 
    String header1 = "          Heat index: Key West, Florida        "; 
    String header2 = "\n            Months          \n   "; 
    String[] months = {" Jan ", "Feb ", "Mar ", "Apr ", "May ", "Jun ", "Jul ", "Aug ", "Sep ", "Oct ", "Nov ", "Dec ", "Avg \n"}; 
    String header3 = "*****************************************************************************************"; 
    String temp = "Temp (F)  "; 
    String humid = "Hudimitiy (%) "; 
    String heatIndexHeader = "HI (F)  "; 


    //read keyWestHumid into array 
    while (keyWestHumidScan.hasNext()) { 

     String data1_parse = keyWestHumidScan.next(); 
     double data1 = Double.parseDouble(data1_parse); 
     keyWestHumid[counter1] = data1; 
     counter1++; 


    } 
    //read keyWestTemp into array 
    while (keyWestTempScan.hasNext()) { 
     String data2_parse = keyWestTempScan.next(); 
     double data2 = Double.parseDouble(data2_parse); 
     keyWestTemp[counter2] = data2; 
     counter2++; 

    } 
    System.out.println(header1); 
    System.out.print(header2); 
    for (String headData : months) { 
     System.out.print(headData); 
    } 
    System.out.println(header3); 
    System.out.print(temp); 
    for (double data : keyWestTemp) { 
     System.out.print(keyWestTemp + "  "); 
    } 
    System.out.println(); 
    System.out.print(humid); 
    for (double data : keyWestHumid) { 
     System.out.print(keyWestHumid + "  "); 
    } 
    System.out.println(); 
    System.out.print(heatIndexHeader); 
    counter1 = 0; 
    counter2 = 0; 
    for (int counter3 = 0; counter3 <= 12; counter3++) { 
     double heatIndex = (-42.379 + (2.04901523 * keyWestTemp[counter1]) + (10.14333127 * keyWestHumid[counter2]) - (0.22475541 * keyWestTemp[counter1] * keyWestHumid[counter2]) - (0.00683783 * (keyWestTemp[counter1] * keyWestTemp[counter1]))); 
     heatIndex = heatIndex + (-0.05481717 * (keyWestHumid[counter2] * keyWestHumid[counter2]) + (0.00122874 * (keyWestTemp[counter1] * keyWestTemp[counter1] * keyWestHumid[counter2])) + 0.00085282 * keyWestTemp[counter1] * (keyWestHumid[counter2] * keyWestHumid[counter2]) - (0.00000199 * (keyWestTemp[counter1] * keyWestTemp[counter1]) * (keyWestHumid[counter2] * keyWestHumid[counter2]))); 
     counter1++; 
     counter2++; 
     counter3++; 
     System.out.print(heatIndex + "  "); 
    } 

    } 
} 
+0

你能複製粘貼你的輸出嗎? –

+0

什麼是預期vs實際輸出(你得到什麼不想要的字符,以及在哪裏) – Doon

回答

1

要開始,你的代碼是非常難以閱讀。確保您遵循了良好的代碼風格(例如,在for循環塊內縮進4個空格)。通讀這一點:http://www.oracle.com/technetwork/java/codeconv-138413.html

從你的代碼一眼,可以在porblem在這裏:

for(double data:keyWestTemp) { 
System.out.print(keyWestTemp + "  "); 
} 

這裏:

for(double data:keyWestHumid) { 
System.out.print(keyWestHumid + "  "); 
} 

我想你想在打印線使用數據,而不是keyWestHumid/Temp。數據是對象,keyWestHumid/Temp是你的整個數組。

你應該真的使用IDE,比如Eclipse或Netbeans,它會讓你的生活變得更容易。 Eclipse立刻告訴你這些循環中沒有使用數據,這是一個問題。

+0

謝謝。我實際上使用BlueJ--我會着眼於使用net beans。主要問題是我想在我的學校和家用電腦之間安裝一個便攜式IDE; Eclipse在拇指驅動器上效果不佳,而且我之前沒有碰過NetBeans。我一定會試一試。 – OrangeCalx01

+0

歡迎您!我沒有使用它,但看起來你可能能夠獲得一個可移植版本的Eclipse:http://portableapps.com/node/32861 – hankd

2

您正在打印出對象的集合,而不是單個對象本身。例如:for (double data : keyWestTemp) { System.out.print(keyWestTemp + " "); }

實際上應該是:for (double data : keyWestTemp) { System.out.print(data + " "); }

0

使用System.out.printf來格式化要顯示在控制檯上的文本。

System.out.printf("%10s%10s", "Number", "String"); 
System.out.println(""); 
System.out.printf("%10d", 10); 
System.out.printf("%10s", "Hi there");