2014-04-19 3 views
0

입력 불일치를 방지하기 위해 try catch를 사용하고 있습니다. 나는 자바를 처음 사용하기 때문에 메소드에 대한 이해가 부족할 수도있다. try catch를 넣을 때마다 finally 형식으로 이미 반환 형식을 작성해야한다는 오류가 발생합니다. 그리고 만약 try 블럭 안에 있다면 리턴 타입이 필요하다. Heres는 내 코드 :캐치를 시도하면 메서드가 반환됩니다.

 public static double average() { 
     try{ 
    Scanner avgs = new Scanner(System.in); 
    System.out.println("Enter total number of numbers; "); 
    double tnum = avgs.nextDouble(); 
    double[] nums = new double[(int) tnum]; 
    double sum = 0; 
    for (int i = 0; i < tnum; i++) { 
     System.out.println("Enter number " + (i + 1) + " : "); 
     nums[i] = avgs.nextDouble(); 
     sum += nums[i]; 

    } 

    System.out.println(" "); 
    System.out.println("The sum is: " + sum); 
    double avg = sum/tnum; 
    System.out.println("The average is: " + avg); 



}catch(InputMismatchException e){System.out.println("Enter a number honey:);      

} 
    finally{return avg;} 

} 

오류가 :

Enter a for average or s for sum 
    a 
    Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
avg cannot be resolved to a variable 

at com.towerdef.shit.Recursion.average(Recursion.java:78) 
at com.towerdef.shit.Recursion.yn(Recursion.java:18) 
at com.towerdef.shit.Recursion.main(Recursion.java:31) 
+0

변수 avg의 범위가 finally 블록으로 확장되지 않는 것처럼 보입니다. try 블록 앞에 변수를 선언해야합니다. – EnKrypt

+0

은 try 블록 전에 올바르게 실행되지 않습니다. –

+0

예외가 발생하면 제어 흐름은 catch 및 finally 블록으로 건너 뛰고 변수 avg의 선언이 포함 된 메서드의 나머지 문은 무시합니다. – EnKrypt

답변

0

은 다음과 같아야합니다

public static double average() { 
    double avg; 
    try{ 

아래 더욱 :

System.out.println("The sum is: " + sum); 
avg = sum/tnum; 
System.out.println("The average is: " + avg); 

그것을 할 것이다. 다른 사람들이 말했듯이, avg가 정의되는 방식은 그것을 둘러싸는 try 범위에서만 로컬입니다. 즉, avg는 finally 블록에서 사용할 수 없습니다.

관련 문제