2013-10-29 5 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

예상되는 출력과 실제 출력 (원하지 않는 문자를 얻는 곳, 어디서) – 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이 전체 배열입니다.

Eclipse 또는 Netbeans과 같은 IDE를 사용하면 훨씬 쉽게 사용할 수 있습니다. 바로 이클립스는 데이터가 이러한 루프에서 사용되지 않는다는 것을 알려주며 이는 문제입니다.

+0

감사합니다. 실제로 BlueJ를 사용하고 있습니다. 그물콩 사용에 대해 살펴 보겠습니다. 가장 큰 문제는 내 학교와 가정용 컴퓨터간에 휴대용 IDE를 갖고 싶다는 것입니다. Eclipse는 엄지 드라이브에서 너무 잘 작동하지 않으며 이전에는 NetBeans를 사용하지 않았습니다. 나는 그것을 분명히 시도 할 것이다. – OrangeCalx01

+0

당신은 오신 것을 환영합니다! 나는 그걸로 일하지는 않았지만 이식 가능한 이식 버전을 얻을 수있을 것 같다. 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"); 
관련 문제