2013-07-20 3 views
-2

명령 줄에서 이중 값을 얻고 평균을 계산하기 위해이 값을 썼지 만 계산하지 않는 것 같습니다. 먼저 배열을 초기화해야합니까?명령 행에서 이중 값의 평균을 찾는?

편집

public class Average { 

    public static void main(String[] args) { 

     double avg=0; 
     double num=0; 

     for (int i=0; i>=args.length; i++) 
      num = Double.parseDouble(args[i]); 
      avg+=num; 

     System.out.println(avg/args.length); 
    } 
} 

감사합니다 : 이것은 완성 된 제품, 나는 중괄호를 추가하고 논리를 고정하여 루프 고정. 마지막 줄에는 캐스트가 필요하지 않지만 좋은 생각입니다.

public class Average { 

    public static void main(String[] args) { 

     double avg=0; 
     double num=0; 

     for (int i=0; i<args.length; i++){ 
      num = Double.parseDouble(args[i]); 
      avg+=num; 
     } 

     System.out.println(avg/args.length); 
    } 
} 
+4

for 문에 중괄호를 추가하십시오. –

+0

길이가 0이 아닌지 확인하겠습니다. – duffymo

+1

코드에는 초보자가 실수로 가득 차서 스스로 발견하고 수정하는 방법을 배울 필요가 있습니다. – jahroy

답변

2

여기에 몇 가지 문제가 있습니다. args 길이가 0이면 루프가 실행됩니다 (충돌합니다)! 이는 루프의 조건부가 잘못 되었기 때문입니다. while 루프로 변경하면 더 명확 해집니다.

int i = 0; 
    while (i >= args.length) i++; 

당신은> = <에 변경해야합니다.

또 다른 문제는 루프가 한 문장으로 길다는 것입니다. 진행 상황에 맞게 들여 쓰기를 변경하여보다 명확하게 만들 수 있습니다.

for (int i=0; i < args.length; i++) 
     num = Double.parseDouble(args[i]); 
    avg+=num; 

항상 루프와 조건문에 중괄호를 사용하여 미래에 방지 할 수 있습니다 :

for (int i=0; i < args.length; i++) { 
     num = Double.parseDouble(args[i]); 
     avg+=num; 
    } 

다른 잠재적 인 문제가 args.length는 int이며, 당신은 그것을 사용하는 두 배로 나눈 것. 자바가 여기에서 올바르게 작동 할지라도, int를 double에 명시 적으로 던져서 계산에 사용하는 것이 가장 안전합니다.

System.out.println(avg/(double)args.length); 
+1

+1 "_ 항상 중괄호 사용 _" – jahroy

+0

예, 블록 범위 지정도 중요합니다. +1, 해임. –

+1

@ jahroy, 나는 이미 내 대답에서 이것을 언급했다. –

4

는 당신은 아마 의미 :

for (int i = 0; i < args.length; i++) 

이 주요 논리적 인 문제가 여기에있다으로 해결되어야 다른 (구문) 문제가, 다른 사람이 언급 한 것을 (seanmk의 답변을 @ 참조 예를 들어 범위 지정 루프의 중요성).

(참고 : @ seanmk의 대답은 대괄호 및 범위 지정 문제 만 고려했을 때 추가 정보로 업데이트되기 전에 작성되었습니다.)

+0

감사합니다,이게 무슨 – dcole617

+0

당신의 문제를 해결 트릭을 한 것입니다, 답변을 수락대로 감사하십시오. –

관련 문제