为什么我的代码中会有额外的输出?

时间:2014-11-12 15:46:12

标签: java arrays string loops char

我正在尝试编写一个代码,它将字符串数组作为输入,并创建一个char类型的二维数组,行数就像字符串中的单词数和每行中的单词数一样是单词中反转的字母数组。

例如,如果我的输入是:从最后开始!

我的输出将是:

[t,r,a,t,s]

[t,a]

[e,h,t]

[!,d,n,e]

这是我的代码:

public static void main(String[] args) {

    char thelist[][] = new char[args.length][];
    for (int i = 0; i < args.length; i++) {
        thelist[i] = new char[args[i].length()];

        for (int k = 0; k < args[i].length(); k++) {
            char letter = args[i].charAt(args[i].length() - k - 1);
            thelist[i][k] = letter;
        }

        for (char[] word : thelist) {
            String list = Arrays.toString(word);
            System.out.println(list);
        }
    }
}

3 个答案:

答案 0 :(得分:0)

代码应该是这样的:

   String str ="start at the end!";
   String[] splitString = str.split(" ");
   int length=0;
   for(String string:splitString ){
       if(string.length()>length){
           length=string.length();
       }
   }
   Character[][] charArray = new Character[splitString.length][length];
   int index=0;
   for(String string:splitString ){
       length=string.length();
       for(int i=0;i<string.length();i++){
           charArray[index][--length]=string.charAt(i);
       }
       index++;
   }

   for (int i=0;i<charArray.length;i++){
       for (int j=0;j<charArray[i].length && charArray[i][j]!=null;j++) {
           System.out.print(charArray[i][j]);
       }
       System.out.println();
   }

输出:

trats
ta
eht
!dne

答案 1 :(得分:0)

在编辑你的问题时,我修改了你的代码缩进,清楚地显示了你的问题:你把代码负责打印结果数组放在填充这个数组的同一个循环中。换句话说,在向其添加新行后,您将打印数组。

这就是为什么你看到结果的原因

[row1]
null
null
null
[row1]
[row2]
null
null
[row1]
[row2]
[row3]
null
[row1]
[row2]
[row3]
[row4]

要解决这个问题,只需将负责循环的循环放在负责生成结果数组内容的循环之外(请记住,缩进不负责作用域,但放置{}括号是,所以在打印循环之前从结尾移动一个}。所以将代码更改为

char thelist[][] = new char[args.length][];
for (int i = 0; i < args.length; i++) {
    thelist[i] = new char[args[i].length()];

    for (int k = 0; k < args[i].length(); k++) {
        char letter = args[i].charAt(args[i].length() - k - 1);
        thelist[i][k] = letter;
    }
}

for (char[] word : thelist) {
    String list = Arrays.toString(word);
    System.out.println(list);
}

答案 2 :(得分:0)

您正在获取额外的行,因为您正在外部for循环中打印。试试这个。它应该工作。

public static void main(String[] args) {

    char thelist[][] = new char[args.length][];
    for (int i = 0; i < args.length; i++) {
        thelist[i] = new char[args[i].length()];

        for (int k = 0; k < args[i].length(); k++) {
            char letter = args[i].charAt(args[i].length() - k - 1);
            thelist[i][k] = letter;
        }
    }

    for (char[] word : thelist) {
            String list = Arrays.toString(word);
            System.out.println(list);
    }
}