2013-10-05 3 views
0

안녕하세요. 저는 Java에서 비교적 새로운 편입니다. 2 개월 정도의 경험이 있으므로 제 학습 수준과 관련된 용어와 코드를 사용하여 제 질문에 대답 해주십시오."null"논리 오류 - Java

그래서 나는 다음과 같은 형식을 피팅, 편지를 만들어 학교에 대한 프로그램을해야 :

내 코드는 다음과 같습니다
Dear recipient name: 

blank line 

first line of the body 

second line of the body 

. . . 

last line of the body 

blank line 

Sincerely, 

blank line 

sender name 

:

private String body; 
    private String letter; 

    public Letter(String from, String to) 
    { 
     letter = ("Dear " + to + ":" + "\n" + "\n" + body + "\n" + "Sincerely," + "\n" + "\n" + from); 
     body = ""; 
    } 

    public void addLine(String line) 
    { 
     body = body + line + "\n"; 
    } 

    public String getText() 
    { 
     return letter; 
    } 

필자가 여러 가지 방법을 시도 이 프로그램을 끝내면 가장 좋은 결과를 얻을 수있는 프로그램이 바로이 프로그램입니다. 문제는 두 개의 인스턴스 필드 max를 사용해야한다는 것입니다. 그것은 시체가 내 생성자에 값을 부여하지 않기 때문에 그것은 null 인 것 같습니다. 이처럼 보이는 프로그램 테스터 클래스도 있습니다 : 나는 모든 기본 재료를 생략하지 않고 어떤 괄호와 프로그래머에는 구문 오류,하지만 난 테스터 클래스를 실행할 때, 나는 얻을

public class LetterTester 

{ 

    public static void main(String [] args) 

    { 

     Letter tyler = new Letter("Mary", "John"); 

     tyler.addLine("I am sorry we must part."); 

     tyler.addLine("I wish you all the best."); 

     System.out.println(tyler.getText()); 

    } 

} 

:

Dear John: 

null 
Sincerely, 

Mary 

내가 뭘 잘못하고 누군가가 null을 제거하는 방법에 대한 해결책을 줄 수 있습니까? 두 개의 인스턴스 필드 만 사용할 수 있다는 점에 유의하십시오.

+0

'body = body;'생성자 안에 !! – Sage

답변

0

bodynull입니다 기능에 일을 같이함으로써 당신은 문자열에 아무것도 추가 할 수 없습니다. 빈 문자열 body = "" 대신 초기화 할 수 있습니다. 그 코드는 addLine() 코드에서 작동합니다. 생성자의 내용을 getText()으로 이동해야합니다. 생성자에서 필요한 데이터를 아직 사용할 수 없습니다.

StringBuilder도 사용하는 것이 좋습니다. 연결을 여러 번 만들 필요가있을 때 보통 +보다 좋습니다.

편집 : 여기

body = "Dear " + to + ":" + "\n\n"; sender = from; 

내가 sender을했다 :
생성자에서

(영업 의해 명확히 주석 후, 자신이 질문 더 나은 독서) 당신은 같은 편지를 시작할 수 있습니다 들. letter 입력란이 필요하지 않으므로 최대 2 입력란 한도를 유지할 수 있습니다.

+0

예.하지만 getText에서 사용할 수 없습니다. to 및 from 매개 변수는 생성자에 있습니다. 내 문제입니다. – Crazykid0416

+0

@ Crazykid0416'to' 변수는 처음부터 필요하기 때문에 아무 곳에 나 저장할 필요가 없습니다. 그래서 당신은 처음의'body'에 추가 할 수 있습니다. (또는'StringBuilder'). 그래서 필요한 유일한 필드는'from '을 저장하는 것이고, 지금까지는 문자의 내용입니다. – kiheru

+0

그래서 내 인스턴스 필드는 전체 문자를 나타내는 무언가이고 변수는? – Crazykid0416

0

body 변수를 빈 문자열로 초기화해야합니다. 그렇지 않으면 그 null로 초기화하고, 당신이 그 참조 필드의 기본값이기 때문에 addLine()

+0

나는 body = body를 body = ""로 대체하고 아무 것도 작동하지 않으면 동일한 null 결과를 얻는다. – Crazykid0416