2013-04-29 1 views
-3

다음 코드는 else 문으로 들어갑니다. 나는 내가 실수 한 곳을 찾을 수 없다. * 아래의 코멘트에서 실행하고 싶습니다. * B가 아래 주석에서 실행 중입니다. 당신이 if 조건을 만족하지 않는, 그래서 초기화되지 않은 static int 변수는 기본적으로 0을하기 때문에정적 변수로 인해 Java에서 프로그래밍 오류가 발생했습니다.

package com.java; 
    import java.util.Scanner; 

    public class Solution 
    { 
     static int n; 
     static String w[]; 

     public static void main(String[] args) 
     { 
      System.out.println("enter no of string between 1 to 50"); 
      Scanner scanner = new Scanner(System.in); 
//* A 
      if ((1<n) && (n<=50)) 
      { 
      n = scanner.nextInt(); 
      System.out.println("enter " +n+ "strings between 1 to 2000 length");    
      for (int i=0; i<n; i++) 
      { 
       w[i]= scanner.next(); 
       if ((1<w[i].length()) && (w[i].length()<2000)) 
       { 
        System.out.println("ok");   
       } 
      } 
      System.out.println(w); 
      } 
// *B 
     else 
      { 
      System.out.println("coming due to static"); 
      }  
     } 
    } 
+0

코드를 올바르게 들여 쓰면 '사례 1'과 '사례 2'의 의미를 파악할 수 있습니다. –

+1

작성한 내용으로 n은 정적이며 값을 변경하지 않으므로 항상 0입니다. – antlersoft

답변

1

당신은, n를 초기화하지 않았다.

은 그래서 :

if ((1<n) && (n<=50))

true로 평가되지 않으므로 else이 실행됩니다. 당신이 하지 액세스 정적 변수 비 정적 방법 에서 (@NilsH 답변을 참조) 할 수

참고. 그리고 그것은 많은 의미를가집니다.

+1

내가 싫어하는 가장 큰 것 중 하나는 익명 다운 voters는 downvotes을 설명하지 않습니다 .. 어떻게 우리가 실수로 이런 식으로 배워야합니까? – Maroun

+0

그가 n = scanner.nextInt() 호출을 놓친 사실을 놓쳤습니다. if 문 앞에 나머지는 올 바릅니다. –

+0

마음을 읽지 않습니다. 나는 왜 코드가 작동하지 않는지 썼다. 해결할 수있는 방법은 백만 가지가있다. – Maroun

4

static은 클래스 변수라는 것을 의미합니다. 즉, 클래스 인스턴스에 속하지 않습니다. 그리고 반대로, 비 정적 변수는 클래스의 인스턴스에 속합니다. 정적 메서드에서 변수 n을 참조하고 있으므로 변수가 정적으로 선언되지 않으면 작동하지 않습니다.

(그리고 분명히, if 자체 때문에 @MarounMaroun의 응답 언급 무엇 작동하지 않습니다)

0

당신이 static int nstatic String w[] 대중을 시도 했습니까?

IE :

비 정적 메소드에 모든 코드를 이동 당신이 아마 원하는
public static int n ; 
public static String w[] ; 
0

. 다음의 주요 방법으로 단지 static 방법으로 작업 할 때, 당신은 static 변수를 참조해야합니다 먼저이

Solution s = new Solution(); 
s.myNonStaticMethod(); 
1

, 그런 짓을. 클래스에 속한 non-static 변수를 참조하려고하면 오류이므로 컴파일러에서 불평 할 것입니다. 정적 변수는 클래스 자체에 속하지 않습니다.

둘째, 오타가 있거나 코드를 잊어 버린 것 같습니다. n은 절대로 설정되지 않습니다. 따라서 static 컨텍스트에서는 0으로 초기화되고 else가 발생합니다. 사용자 입력이나 다른 방법을 통해 if 문 앞에 실제로 n을 설정하는 것이 좋습니다. 모든 값을 static으로두고 실제로 n의 값을 제공하면 코드가 작동합니다.

는 예를 들어, 당신은 아마이 과제를해야 :

n = scanner.nextInt();

을 경우-문 앞에.

코드에서 읽으려는 다음 번호를 읽는 데 또 다른 문제가 있지만 해결할 수 있도록 남겨 둘 것입니다.

관련 문제