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