2016-12-05 41 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