String [] []输出问题

时间:2015-02-04 14:30:22

标签: java arrays

我正在尝试编写一个程序,我需要为用户输入的名字和姓氏列表输出一个二维数组。当我尝试运行程序时没有错误,但是它为输出提供了这个:

[[Ljava.lang.String;@b8f82d, [Ljava.lang.String;@1ad77a7,     
[Ljava.lang.String;@18aaa1e, [Ljava.lang.String;@a6aeed,   
[Ljava.lang.String;@126804e, [Ljava.lang.String;@b1b4c3, 
[Ljava.lang.String;@d2906a, [Ljava.lang.String;@72ffb, 
[Ljava.lang.String;@1df38fd, [Ljava.lang.String;@16a786, 
[Ljava.lang.String;@1507fb2, [Ljava.lang.String;@1efb836, 
[Ljava.lang.String;@126e85f, [Ljava.lang.String;@161f10f, 
[Ljava.lang.String;@1193779, [Ljava.lang.String;@8916a2, 
[Ljava.lang.String;@2ce908, [Ljava.lang.String;@77158a, 
[Ljava.lang.String;@27391d, [Ljava.lang.String;@116ab4e, 
[Ljava.lang.String;@148aa23, [Ljava.lang.String;@199f91c, 
[Ljava.lang.String;@1b1aa65, [Ljava.lang.String;@129f3b5, 
[Ljava.lang.String;@13f3045, [Ljava.lang.String;@17a29a1,  
[Ljava.lang.String;@1434234, [Ljava.lang.String;@af8358, 
[Ljava.lang.String;@d80be3, [Ljava.lang.String;@1f4689e,  
[Ljava.lang.String;@1006d75, [Ljava.lang.String;@1125127, 
[Ljava.lang.String;@18dfef8, [Ljava.lang.String;@15e83f9,  
[Ljava.lang.String;@2a5330] 

建立成功(总时间:0秒)

这是我的代码:

package assignment_6_1;
import java.util.Scanner;
import java.util.Arrays;
public class Assignment_6_1 {

    public static void main(String[] args) {
        //Create a Scanner
        Scanner input = new Scanner(System.in);
        //Create int & string []
        String[][]firstAndLastNames = new String[36][2];
            int[]heightOfPerson = new int[36];

        //Gather list of names and heights
        for(int i=0; i<heightOfPerson.length; i++)
        {
            //Get first name
            System.out.println("Enter Your First Name " + "Passenger #" + i+1 + ": ");
            firstAndLastNames[1][i] = input.next();

            //Get last name
            System.out.println("Enter Your Last Name " + "Passenger #" + i+1 + ": ");
            firstAndLastNames[2][i] = input.next();

            //Get height in inches
            System.out.println("Enter your height (Iches) " + "Passenger #" + i+1 + ": ");
            heightOfPerson[i] = input.nextInt();

            if(firstAndLastNames[36][2] != null){
            System.out.println(Arrays.deepToString(firstAndLastNames));
            break;}
        }
    }
}

然后我必须输出该人的身高,但我还没有那么远。

5 个答案:

答案 0 :(得分:2)

不要使用Arrays.toString(array)。使用Arrays.deepToString(array)。它将打印多维数组。

    String[][] array = new String[][] {
            { "Apple", "Pear", "Fruit" },
            { "Pi", "Rho", "Omega" }, 
            { "Jack", "Jill", "Joe" } 
    };

    System.out.println(Arrays.deepToString(array));

    //Prints: [[Apple, Pear, Fruit], [Pi, Rho, Omega], [Jack, Jill, Joe]]

答案 1 :(得分:1)

您正在对外部数组进行字符串化,但不处理内部数组。您需要做的是通过迭代外部数组来构建输出。

这应该有所帮助:

for (String[] firstAndLastName : firstAndLastNames) {
    System.out.println(firstAndLastName[0] + ", " + firstAndLastName[1]);
}

或者,您可以将用户详细信息存储在User对象中。然后,如果您在该对象上定义toString方法,则原始Arrays.toString调用将产生更清晰的输出。

class User {
    private String firstName, lastName;

    public User(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    ...

    public String toString() {
        return firstName + ", " + lastName;
    }
}

另外,正如尼尔森指出你的for循环对它进行了错误的循环测试。你现在有一个空数组,所以你也需要解决这个问题。

答案 2 :(得分:1)

也许你不应该这样做

 for(int i=0; i>35; i++)

而是

for(int i=0; i<35; i++)

答案 3 :(得分:0)

您正在尝试将姓氏存储在数组中不存在的位置!

您正在声明您的数组:

String[][]firstAndLastNames = new String[35][1];

这意味着您有35行, 1列。数组从索引零开始。不是一个。

当您尝试存储姓氏时:

firstAndLastNames[i][1] = input.next();

您没有调用正确的列索引。将数组移除线条行更改为:

String[][]firstAndLastNames = new String[35][2]; //now we have 2 columns

正确存储数据后,您需要遍历数组以正确显示数据。

尝试以下代码:

public static void main(String[] args) {
        String[][] array = new String [3][2]; //Notice how the column declaration is now '2'. This means available indexes are 0 and 1.
        Scanner scn = new Scanner (System.in);
        for (int i = 0; i < array.length; i++) {
            System.out.println ("Enter data " + i + ")");
            array[i][0] = scn.nextLine();
        }
        array[0][1] = "1"; //Understand why this works now?
        array[1][1] = "2";
        array[2][1] = "3";  

        for (int i = 0; i < array.length; i++) {
             for (int k = 0; k < 2; k++) {
                 System.out.println((array[i][k]));
             }
        }

    }

答案 4 :(得分:0)

matthew的回答是完美的,但是如果我们对concat操作进行小的改动那么它会变得更加流畅,例如。

 public static void main(String...args) {

    String[][] firstAndLastName =  {
            {"Bob","Martin"},
            {"Martin","Fowler"}
    };

    for(String[] name : firstAndLastName) {
        System.out.println(toString(name));
    }
}

 private static String toString(String[] a) {
    int iMax = a.length - 1;

    StringBuilder b = new StringBuilder();

    for (int i = 0; ; i++) {
        b.append(a[i]);
        if (i == iMax)
            return b.toString();
        b.append(", ");
    }
}