2016-09-20 3 views
0

Hier ist die Message Klasse I erstellt:Wie zu debuggen, warum die Java-Nachrichtenausgabe immer Null ist?

public class Message { 
    static String toString; 
    static String sender; 
    static String recipient; 
    static String messageBody ; 

    public Message(String Sender, String Recipient){ 
    sender = Sender ; 
    recipient = Recipient ; 
    messageBody = ""; 
    } 

    public String getSender(String s){ 
    sender = s; 
    return sender; 
    } 
    public String getRecipient(String r){ 
    recipient = r; 
    return recipient; 
    } 
    public void append (String a){ 
    a = messageBody +a; 
    } 
    public void toString (String m){ 
    messageBody = m; 
    m = ("From: " + sender + "\nTo: "+ recipient+"\n" + "\n" + messageBody); 
    System.out.print(m); 
    } 
} 

Es folgt die main Methode. Ich muss mit toString() Methode drucken.

import java.util.Scanner; 

public class Lab8 { 
    public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Message mess1 = new Message (null, null);  
    Scanner keyboard = new Scanner (System.in); 
    String Sender1= Message.sender; 
    String recipient1 = Message.recipient; 
    String message = Message.messageBody ; 

    System.out.println ("Input Sender Name: "); 
    Sender1 = keyboard.next(); 
    System.out.println ("Input Recipent Name: "); 
    recipient1 = keyboard.next(); 
    do { 
     System.out.print ("Input Message: "); 
     message = keyboard.next(); 
    } while (!message.equals("***")); 

    System.out.print(Message.toString); 
    } 
} 

Dies druckt null jedes Mal. Ich muss auch die Append-Methode einschließen, die es mir erlaubt, den Nachrichtentext nach jeder Zeile zu ändern.

+0

Obwohl dies kompiliert und ausgeführt wird, gibt es hier schwerwiegende Probleme. Das größte Problem ist, dass Message 'statische' Felder verwendet, wenn Sie wirklich Instanzfelder wollen: Löschen Sie' static' aus der Message-Klasse. – Bohemian

+0

Ich habe, dann setze ich eine Rückgabevariable und ich habe immer noch das gleiche Problem. – Cotypiechocki

Antwort

2

Sie haben das alles falsch! Es ist nicht notwendig, ein statisches String-Feld namens toString zu haben, alles was Sie brauchen ist toString() Methode. Aber immer noch, Sie müssen nichts innerhalb der toString() Methode drucken. Gib einfach einen String zurück.

Ihre toString Methode wie folgt ändern:

public String toString (String m) { 
    messageBody = m; 
    m = ("From: " + sender + "\nTo: "+ recipient+"\n" + "\n" + messageBody); 
    return m; 
} 

Dann in Ihrem Hauptverfahren folgende Codezeile es, Gebrauch zu drucken:

System.out.print(mess1.toString(message)); 

Dennoch Ihre Getter und Setter sind falsch. Versuchen Sie, mehr über Getter und Setter zu lesen.

Es sollte zwei Methoden sein:

  • getSender()
  • setSender()

getSender() sollte wie folgt aussehen:

public String getSender(){ 
    return sender; 
} 

und die setSender() sollte wie folgt aussehen:

public void setSender (String sender) { 
    this.sender = sender; 
} 

Das gleiche gilt für den Empfänger.