2016-12-05 44 views
0

因此,我正在編寫一個程序,讓用戶輸入1-5名稱和個人的社會安全號碼。輸入以圖形方式獲取,並打印在控制檯中。輸出應該是所有名稱和安全號碼,並且在用戶輸入所有名稱/號碼後打印所有內容。雖然我的代碼(有點)工作,如果我輸入五個名稱/ soc.numbers,它不工作,如果我只輸入1-4名稱。例如,如果我輸入三個人/ soc.number,則輸出如下所示:[[person1,soc1],[person2,soc2],[person3,soc3],[null,null],[null,null]]如何停止在二維數組中打印「空」?

現在我知道什麼是錯的:當數組中沒有值時,它總是會打印出null。但是,我不知道如何解決這個問題。我正在考慮使用2D數組列表,但是我不認爲這是可能的,因爲2D數組必須是[5] [2]數組。任何幫助,將不勝感激!!

package whatever; 

import java.util.Arrays; 
import java.util.Scanner; 

import javax.swing.JOptionPane; 
import javax.swing.UIManager; 

public class 2Darrays { 

public static void main(String[] args) { 
    String[][] namnAndSoc = new String[5][2]; 

    for (int i = 0; i < 5; i++){ 

     UIManager.put("OptionPane.cancelButtonText", "Print"); 
     String in; 
     in = JOptionPane.showInputDialog(null, "Give name and social security number"); 
     if(in==null){ 
      break; 
     } 
     String[] line = in.split(","); 


     for (int j = 0; j< 2; j++){ 

      nameAndSoc[i][j] = line[j]; 
     } 

    } 

    System.out.println(Arrays.deepToString(nameAndSoc)+"\t"); 

} 
} 
+0

在向陣列添加元素的同時進行驗證 – Jobin

+0

只需用循環打印數組,而不是使用'Arrays.deepToString()'打印所有內容。這樣你可以決定你想要打印哪個元素。我建議將這些元素存儲在一個Object中,而不是使用2D數組。 – Paul

+0

如果您完全不輸入任何內容,則此代碼會拋出並顯示NPE – XtremeBaumer

回答

0

我想在這裏說你需要的對象名稱和SSN字段的人。那麼你可能有例如人員名單。用數組處理這類數據絕對不是好事,尤其是當你擁有更多的屬性而不僅僅是一個名字和SSN時

0

Arrays.deepToString()寫入將null轉換爲"null",如果你不想這樣做,你必須執行以下操作之一:

  1. 修改數組的內容,以便在出現的任何位置用空格替換爲""
  2. 編寫自己的輸出例程而不是使用deepToString()

第二個選項可能是大多數開發人員會選擇的。像deepToString()這樣的例程通常用於調試和日誌輸出,而不是用於「真實」程序輸出,因爲它很少採用最終用戶會喜歡的格式。

可以使用的技術,如書面的方式處理空自己的字符串轉換方法你想:

String nullToBlank(String s) { 
    return s == null ? "" : s; 
} 

如果你願意的依賴帶來,東西像Apache下議院IO有噸方便的方法來幫助這種事情。

+0

感謝您的回覆,雖然我不確定如何使用for循環執行此操作。我試圖做類似 '爲(INT X = 0; X <5; X ++){ \t \t \t的System.out.println(nameAndSoc [i] [j]); \t \t}' 但所有我得到的是,i和j沒有初始化 – virtusplow

+0

我認爲你需要了解什麼是「初始化」的意思 - 編譯器告訴你你的問題是什麼。 – slim

+0

所以,如果我在代碼的開始處初始化i和j,如int i = 0;和int j = 0; ,我仍然得到一個錯誤,說ArrayIndexOutOfBoundException ...我甚至不確定我在這裏做了正確的事情 – virtusplow