Java 字符串[][]输出问题

Java 字符串[][]输出问题,java,arrays,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, [Ljav

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

[[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;}
        }
    }
}
package assignment_6_1;
导入java.util.Scanner;
导入java.util.array;
公开课作业(6)(1){
公共静态void main(字符串[]args){
//创建扫描仪
扫描仪输入=新扫描仪(System.in);
//创建int和string[]
字符串[][]firstAndLastNames=新字符串[36][2];
int[]人的高度=新的int[36];
//收集姓名和身高列表

对于(inti=0;i您正在串接外部数组,但是内部数组没有被处理。您需要做的是通过迭代外部数组来构建输出

这将有助于:

for (String[] firstAndLastName : firstAndLastNames) {
    System.out.println(firstAndLastName[0] + ", " + firstAndLastName[1]);
}
或者,您可以将用户详细信息存储在
user
对象中。然后,如果在该对象上定义
toString
方法,则原始
数组。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;
    }
}

此外,正如nielsen指出的那样,for循环的循环测试是错误的。您目前有一个空数组,因此也需要解决这个问题。

您正在串接外部数组,但内部数组没有得到处理。您需要做的是通过迭代外部数组来构建输出

这将有助于:

for (String[] firstAndLastName : firstAndLastNames) {
    System.out.println(firstAndLastName[0] + ", " + firstAndLastName[1]);
}
或者,您可以将用户详细信息存储在
user
对象中。然后,如果在该对象上定义
toString
方法,则原始
数组。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;
    }
}

此外,正如nielsen指出的,for循环的循环测试是错误的。您目前有一个空数组,因此您也需要解决这个问题。

也许您不应该这样做

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

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

for(inti=0;i也许你不应该这样做

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

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

for(int i=0;i不要使用
数组。toString(数组)
。使用
数组。deepToString(数组)
。它将打印多维数组

    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]]

不要使用
array.toString(array)
。使用
array.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]]

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

您是这样声明阵列的:

String[][]firstAndLastNames = new String[35][1];
这意味着您有35行和1列。数组从索引0开始,而不是一个

当您尝试存储您的姓氏时:

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]));
             }
        }

    }
publicstaticvoidmain(字符串[]args){
String[][]数组=新字符串[3][2];//请注意,列声明现在是“2”。这意味着可用的索引是0和1。
扫描仪scn=新扫描仪(System.in);
for(int i=0;i
您试图将姓氏存储在数组中不存在的位置!

您是这样声明阵列的:

String[][]firstAndLastNames = new String[35][1];
这意味着您有35行和1列。数组从索引0开始,而不是一个

当您尝试存储您的姓氏时:

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]));
             }
        }

    }
publicstaticvoidmain(字符串[]args){
String[][]数组=新字符串[3][2];//请注意,列声明现在是“2”。这意味着可用的索引是0和1。
扫描仪scn=新扫描仪(System.in);
for(int i=0;i
马修的答案很完美,但如果我们在concat操作中做一些小改动,那么对于eg来说,它会变得更加流畅

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

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

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


马修的答案是完美的,但若我们在concat操作中做一些小的改变,那个么对于eg来说,它将变得更加流畅

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

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

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


它正确地打印了每个单元格的内容,但内容本身就是一个数组,所以我想您可以打印对象的
toString
。请参见下面的答案,以获取打印2d数组的示例:您没有正确打印数据;在获得数据后,必须迭代数组以获取数据。您当前的“System.out.println(Arrays.toString(firstAndLastNames));将简单地打印地址。您需要使用for-loop遍历每个元素的数组。您期望的输出是什么?仅举一个示例说明它如何与
Arrays.deepToString(Object[]一起工作)
:它正确地打印每个单元格的内容,但内容本身是一个数组,因此我想您可以打印对象的
toString
。请参阅下面的答案,以获取打印2d数组的示例:您没有正确地打印数据;获取数据后,必须迭代数组以获取数据。您当前的“System.out.print