0

私は熱指数を計算するプログラムに取り組んでおり、foreach ループを多用することになっています。ただし、端末に印刷すると、正しく出力されません。私はすでにこれに2日間費やしましたが、なぜまだこれを行っているのかわかりません. ヘルプ/アドバイスをありがとう!

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 + "      ");
    }

  }
}
4

3 に答える 3

2

個々のオブジェクト自体ではなく、オブジェクトのコレクションを印刷しています。例えば:for (double data : keyWestTemp) { System.out.print(keyWestTemp + " "); }

実際には次のようになります。for (double data : keyWestTemp) { System.out.print(data + " "); }

于 2013-10-29T15:55:56.250 に答える
1

まず、あなたのコードは非常に読みにくいものです。適切なコード スタイルに従っていることを確認してください (たとえば、for ループ ブロック内で 4 つのスペースをインデントします)。これを読んでください:http://www.oracle.com/technetwork/java/codeconv-138413.html

コードをざっと見てみると、問題は次のとおりです。

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

そしてここ:

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

keyWestHumid/Temp の代わりに、印刷行でデータを使用したいと思います。data はオブジェクト、keyWestHumid/Temp は配列全体です。

Eclipse や Netbeans などの IDE を実際に使用する必要があります。これにより、作業がずっと楽になります。Eclipse はすぐに、これらのループでデータが使用されていないことを通知しますが、これは問題です。

于 2013-10-29T15:57:02.403 に答える
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");
于 2013-10-29T15:58:33.580 に答える