2015-01-13 7 views
-1

안녕하세요, 숫자가 포함 된 문자열을 정수로 변환하는 간단한 프로그램을 작성하려고합니다. 왜 System.out.println에 오류가 발생했는지, 왜 도움이 될 수 있습니까?자바 - 비 정적 필드에 정적이 아닌 참조를 만들 수 없습니다.

public class TypeConvert { 

int strToInt; 

public int convert (String s){ 

    strToInt = Integer.parseInt(s); 
    return strToInt;  
} 

public static void main(String[] args) { 
    String strNumber=("100"); 

    TypeConvert convertToInt = new TypeConvert(); 
    convertToInt.convert(strNumber); 

    System.out.println(strToInt); 


    } 

} 

이것은 편집 중이므로 중복으로 표시되어 있습니다. 나는 실제로 내 문제에 대한 모든 관련 게시물을 읽었지만 자신의 문제를 해결하는 방법을 이해하지 못하여 자신의 게시물을 만들었습니다.

+1

다른 질문이나 답변에 대해 이해할 수 없다면 * 이해할 수없는 * 것을 지적하십시오. –

답변

2

변경이,

System.out.println(strToInt); 

strToInt가 (당신이 convertToInt 명명 한)이 TypeConvert 인스턴스의 필드이기 때문에

System.out.println(convertToInt.strToInt); 

합니다. convert 함수가 결과를 반환하기 때문에

또는,

System.out.println(convertToInt.convert(strNumber)); 

을 작성할 수 있습니다.

+0

고맙습니다. 이유를 이해하고 싶습니다 - strToInt가 전역 변수이므로 필요하지 않을 것이라고 생각했습니다. 결과를 인쇄하는 방법을 참조해야하는 이유는 무엇입니까? 죄송합니다. 저는 Java에 대해 처음 보셨을 것입니다. 감사. –

+0

'int strToInt'는 패키지 레벨 인스턴스 필드입니다. 클래스 레벨 필드 (인스턴스 당 하나가 아닌 클래스 당 하나)를 원하면'static int strToInt'이어야합니다. 나는 당신이'TypeConvert' 인스턴스를 가지고 있기 때문에 그것이 당신이 원하는 것이라고 생각하지 않습니다. –

0

convert 메서드는 "상태"정보가 필요하지 않으므로 정적 메서드 여야합니다.

public class TypeConvert { 
    public static int convert (String s){ 
     int strToInt = Integer.parseInt(s); 
     return strToInt;  
    } 

    public static void main(String[] args) { 
     String strNumber=("100"); 

     int strToInt = TypeConvert.convert(strNumber); 

     System.out.println(strToInt); 
    } 
} 

일반적으로 상태를 사용해야 할 때 비 정적 필드와 인스턴스 메서드를 만듭니다. 예를 들어,의는 사람의 이름을 인쇄 할 수 있도록 각 Person 다른 이름을 가질 것입니다 때문에 당신이 절대적으로 인스턴스의 속성에 name 변수를 "저장"하기 위해 필요한이 경우

public class Person { 
    private String name; 

    public Person(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return this.name; 
    } 

    public static void main(String[] args) { 
     Person bob = new Person("Bob"); 
     Person john = new Person("John"); 

     System.out.println(bob.getName()); // Prints "Bob" 
     System.out.println(john.getName()); // Prints "John" 
    } 
} 

합니다.

주어진 예제에서 지정된 문자열에 대해 출력은 항상 동일하므로 정적 방법을 사용할 수 있습니다.

관련 문제