1

您好,这只是一个简单的二维数组问题,我想在 2 列中显示我的 2 个数组元素,如下所示:

国家 城市
菲尔斯 马尼拉
SK 首尔
日本 东京
以色列 耶路撒冷

这是我尝试过的代码:

public class ArrayExercise {
    public static void main(String[] args){


        String[][] myArray = {
            {"Philippines", "South Korea", "Japan", "Israel"}, // Countries
            {"Manila", "Seoul", "Tokyo", "Jerusalem" } // capital cities
        };

        System.out.print( "Countries\tCities\n" );

        for( int row = 0; row < myArray.length; ++row ){
            System.out.print( "" );
            for( int col = 0; col < myArray[row].length; ++col ){

                System.out.print( "" + myArray[row][col] + "\t" );

            }
        }
        System.out.println( "" );
    }

}

但我无法让它显示在 2 列中。任何帮助肯定会受到赞赏。多谢你们 :)

4

5 回答 5

2

循环后您不会添加换行符myArray[row]。您需要在循环之后添加它以打印新行:

System.out.println();

一般来说,如果你想要一个换行符,不要调用System.out.print("\n"),而是调用System.out.println()System.out.println()使用系统行尾,不一定是换行符 ( \n)。

于 2012-10-04T11:19:41.070 回答
2

更新:-这是在 2 列中打印它们的方法: -

    String[][] myArray = {
            {"Philippines", "South Korea", "Japan", "Israel"}, // Countries
            {"Manila", "Seoul", "Tokyo", "Jerusalem" } // capital cities
    };

    int j = 0;

    while (j < myArray[0].length) {
        System.out.printf("%-15s - %-15s", myArray[0][j], myArray[1][j++]);
        System.out.println();
    }

由于您想为每列并行打印两行的值。
您可以遍历列,并为相应列打印两行的值。

注意:-我使用了值15进行格式化。一般来说,当字符串(国家或城市)的长度大于该长度时,这可能会给您错误的结果。

对于更多改进,您可以从两行替换15为最长country string和最长的长度。city string

于 2012-10-04T11:20:06.037 回答
1

如何先迭代 col 然后 row ..

for( int col = 0; col < myArray[0].length; ++col ){
            for( int row = 0; row < myArray.length; ++row ){
                System.out.print(myArray[row][col]);
                System.out.print("\t");
            }
            System.out.println();
        }

解释:

你的二维数组是这样的

  • 菲律宾[0,0] 韩国[0,1] 日本[0,2] 以色列[0,3]

  • 马尼拉[1,0] 首尔[1,1] 东京[1,2] 耶路撒冷[1,3]

但是你想要的是这里[row, col] 是以前的索引。

  • 菲律宾[0,0] 马尼拉[1,0]
  • 韩国[0,1] 首尔[1,1]
  • 日本[0,2] 东京[1,2]
  • 以色列[0,3] 耶路撒冷[1,3]

所以用列迭代外循环。在内部循环中,使用 row 迭代并使用 "\t" 分隔。在内循环之后,我打印一个新行。

于 2012-10-04T11:34:05.410 回答
1

如果您确定您正在处理两个等长的列表,请执行以下操作:

public class ArrayExercise {
    public static void main(String[] args){
        String[][] data = {
            {"Philippines", "South Korea", "Japan", "Israel"}, // Countries                                                                                                                                                 
            {"Manila", "Seoul", "Tokyo", "Jerusalem" } // capital cities                                                                                                                                                    
        };

        System.out.print("Countries\tCities\n");
        int colLength = data[0].length;
        for (int i = 0; i < colLength; ++i) {
            System.out.printf("%s\t%s\n", data[0][i], data[1][i]);
        }
    }
}

这将给出(选项卡式)输出:
国家 城市
菲律宾 马尼拉
韩国 首尔
日本 东京
以色列 耶路撒冷

于 2012-10-04T11:43:52.787 回答
0

首先,您需要找出第一列(国家)的最长元素的长度,例如最大长度为 5,并且您希望在每一行都有一个前导空格。而且您还需要找到第二列的最大长度,例如这里是 8。完成此操作后,您可以使用 a 打印元素String.format

outputString = String.format("%1$6s %2$8s\n",country, city);
System.out.println(outputString);

格式化程序将第一个参数的宽度设置为X,因此您将获得正确的缩进。这将适用于任何长度的字符串。

于 2012-10-04T11:28:46.140 回答