【问题标题】:Java String Array Iteration: Is there any way to make this simpler?Java String Array Iteration:有没有办法让这更简单?
【发布时间】:2021-06-01 02:03:25
【问题描述】:

早安,

我是 Java 新手,一直在练习 嵌套循环 迭代。我想知道是否有更简单的方法可以做到这一点?尤其是在我不得不放这个[j+1]的部分。

String[][] entry = {{"010", "John", "Male", "21"},
                {"011", "Mary", "Female", "25"},
                {"012", "Joseph", "Male", "24"},
                {"013", "Peter", "Male", "22"}};


for ( int i = 0; i < entry.length; i++) {

    for ( int j = 0; j < entry[i].length;) {
        System.out.print("ID: " + entry[i][j] + "\n");
        System.out.print("Name: " + entry[i][j+1] + "\n");
        System.out.print("Gender: " + entry[i][j+2] + "\n");
        System.out.print("Age: " + entry[i][j+3] + "\n");
        System.out.println(""); 
        break;
    }           
}

预期的输出是这样的:

ID:010
姓名:约翰
性别:男
年龄:21

编号:011
姓名:玛丽
性别:女
年龄:25

编号:012
姓名:约瑟夫
性别:男
年龄:24

编号:013
姓名:彼得
性别:男
年龄:22

非常感谢您的帮助!

【问题讨论】:

  • 顺便说一下,这种数据结构最好写一个自定义类来表示。现在使用新的records 功能在 Java 16 中编写自定义类变得更加容易。

标签: java arrays string iteration


【解决方案1】:

Erm...您可以删除内部循环,因为您在第一次迭代中中断,因此根本不循环。

String[][] entry = { {"010", "John", "Male", "21"},
                     {"011", "Mary", "Female", "25"},
                     {"012", "Joseph", "Male", "24"},
                     {"013", "Peter", "Male", "22"} };


for (int i = 0; i < entry.length; i++) {
    System.out.print("ID: " + entry[i][0] + "\n");
    System.out.print("Name: " + entry[i][1] + "\n");
    System.out.print("Gender: " + entry[i][2] + "\n");
    System.out.print("Age: " + entry[i][3] + "\n");
    System.out.println("");       
}

编辑:如果嵌套循环是强制性的,您可以像这样实现相同的输出:

String[] type = { "ID", "Name", "Gender", "Age" };

String[][] entry = { {"010", "John", "Male", "21"},
                     {"011", "Mary", "Female", "25"},
                     {"012", "Joseph", "Male", "24"},
                     {"013", "Peter", "Male", "22"} };


for (int i = 0; i < entry.length; i++) {
    for (int j = 0; j < entry[i].length; j++) {
        System.out.println(type[j] + ": " + entry[i][j]);
    }
    System.out.println("");       
}

但是,我建议不要这样做。

【讨论】:

  • 您好,感谢您的及时回复。是的,这确实有效。但是,我正在尝试为此使用嵌套循环。刚刚编辑了那部分,抱歉。
  • 好吧,如果不提取第一位(ID、姓名、性别、年龄),就不能使用嵌套循环。请参阅更新的答案以了解粗略的做法,我不建议这样做。
  • @shoshinsha 您没有使用真正的嵌套循环。您开始一个内部循环,但您假设 j == 0,并且在循环结束之前,您无条件地跳出它。所以内部循环可以被替换为int j = 0;,然后是你的打印语句。
【解决方案2】:

我想这就是你要找的:

String[][] entry = {{"010", "John", "Male", "21"},
                {"011", "Mary", "Female", "25"},
                {"012", "Joseph", "Male", "24"},
                {"013", "Peter", "Male", "22"}};

String[] label = {"ID", "Name", "Gender", "Age"};

for (int i = 0; i < entry.length; i++) {
    for (int j = 0; j < entry[i].length;) {
        System.out.println(label[j] + ": " + entry[i][j]);
    } 
    System.out.println(); 
}

我删除了break。它也不应该出现在原始代码中。

使用println 比添加换行符更好。 (附加\n 不可移植。要使用的正确 行分隔符取决于操作系统。有办法附加正确的行分隔符,但让println 处理它更简单。)

我们也可以使用printf,而不是显式连接字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-13
    • 2011-07-20
    • 2013-11-15
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    相关资源
    最近更新 更多