我正在尝试编写一个程序,我需要为用户输入的名字和姓氏列表输出一个二维数组。当我尝试运行程序时没有错误,但是它为输出提供了这个:
[[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;}
}
}
}
然后我必须输出该人的身高,但我还没有那么远。
答案 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(", ");
}
}