2014-02-08 20 views
1

我有一個基本的名稱應用程序,它從主類獲取用戶數據,在分析器類中拆分數據,然後嘗試分配最後一個類中的所有內容並將其打印出來toString方法。我知道主類和解析器工作正常。我已經在解析器類中驗證了數據DOES可以正確拆分,並且還可以通過我創建的對象將數據發送到最終類來分配所有數據。然而,我最終的代碼返回null ..返回null的最終打印語句(java)

主類


  import java.util.Scanner; 
      public class MainClass { 
       public static void main (String[]args) 
       { 
        Scanner input = new Scanner(System.in); //create scanner object to gather name information 
        String fullName = null; //set the predefined value for the users name to null 
        nameParse splitInformation = new nameParse(); //method build to split the name into different sections 
        SecondClass access = new SecondClass(); //class built to output the different name data 

        System.out.println("What is your name?"); 

        fullName = input.nextLine(); //store the users name and pass it into the data parser 

        splitInformation.parseNameInformation(fullName); //name parsing parameters built 

        System.out.println(access.toString()); 





       } 

      } 

數據解析器類


  public class nameParse { 
       private String firstName; 
       private String middleName; 
       private String lastName; 

       public nameParse() 
       { 
        firstName = "initial"; 
        middleName = "initial"; 
        lastName = "initial"; 
       } 

       public void parseNameInformation(String inputInfo) 
       { 

        //Create an array to store the data and split it into multiple sectors 
        String nameInformation[] = inputInfo.split("\\s"); 

        firstName = nameInformation[0]; 
        middleName = nameInformation[1]; 
        lastName = nameInformation[2]; 

        //System.out.println(firstName + " " + middleName + " " + lastName); 

        SecondClass sendData = new SecondClass(); 

        sendData.setFirstName(firstName); 
        sendData.setMiddleName(middleName); 
        sendData.setLastName(lastName); 


       } 

      } 

final類 __

public class SecondClass { 

     private String firstName; 
     private String middleName; 
     private String lastName; 


     /*public String GFN() 
     { 
      return firstName; 
     } 

     public String GMN() 
     { 
      return middleName; 
     } 

     public String GLN() 
     { 
      return lastName; 
     }*/ 
     public String setFirstName(String yourFirstName) 
     { 
      firstName = yourFirstName; 
      return this.firstName; 
     } 

     public String setMiddleName(String yourMiddleName) 
     { 
      middleName = yourMiddleName; 
      return this.middleName; 
     } 

     public String setLastName(String yourLastName) 
     { 
      lastName = yourLastName; 
      return this.lastName; 
     } 

     public String getFN() 
     { 
      return firstName; 
     } 

     public String toString() 
     { 
      String printNameInfo = "\nYour First Name:\t" + getFN(); 
      return printNameInfo; 
     } 

    } 
+0

歡迎堆棧溢出!要求人們發現代碼中的錯誤並不是特別有效。您應該使用調試器(或者添加打印語句)來分析問題,追蹤程序的進度,並將其與預期發生的情況進行比較。只要兩者發生分歧,那麼你就發現了你的問題。 (然後如果有必要,你應該構建一個[最小測試用例](http://sscce.org)。) –

回答

1

你從來沒有設置任何你的SecondClass對象(稱爲「訪問」)字段,所以它們當然都是空的。

因此,簡而言之,您的代碼會創建一個nameParse對象,從用戶獲取信息,但對該信息不做任何處理。你創建了一個名爲access的SecondClass對象,並沒有放入任何數據,所以當你試圖打印出來時,應該不會有任何有效的數據。解決方案:首先將信息放入您的SecondClass對象中。調用它的setter方法:

// be sure to call the setter methods before trying to print anything out: 
access.setSomething(something); 
access.setSomethingElse(somethingElse); 

編輯
幽州:

我想我設置使用sendData.setFirstname(...)等數據?

parseNameInformation方法創建一個新的對象二等和你設置此對象的字段,但是這個對象是從一個在你的主要方法,其字段仍空完全不同。爲了解決這個問題,給parseNameInformation一個方法參數,並將你的main方法的SecondClass對象傳遞給它並設置它的方法。您必須在之前創建SecondClass對象當然調用方法。

public void parseNameInformation(String inputInfo, SecondClass sendData) 
{ 
    //Create an array to store the data and split it into multiple sectors 
    String nameInformation[] = inputInfo.split("\\s"); 

    firstName = nameInformation[0]; 
    middleName = nameInformation[1]; 
    lastName = nameInformation[2]; 

    //System.out.println(firstName + " " + middleName + " " + lastName); 

    // SecondClass sendData = new SecondClass(); // !!! get rid of this 

    sendData.setFirstName(firstName); 
    sendData.setMiddleName(middleName); 
    sendData.setLastName(lastName); 
} 
+0

你究竟是什麼意思? – KnowledgeGeek

+0

@KnowledgeGeek:見編輯回答。在==垃圾出來時記住垃圾。該對象只會保存你給它的數據。 –

+0

我以爲我使用sendData.setFirstname(...)等設置數據? – KnowledgeGeek