【问题标题】:Why do I get an extra output in my code?为什么我的代码中有额外的输出?
【发布时间】:2015-01-09 12:57:23
【问题描述】:

我正在尝试编写一个代码,它将字符串数组作为输入,并创建一个 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);
        }
    }
}

【问题讨论】:

  • 你的问题是什么?
  • 你得到什么输出?!

标签: java arrays string loops char


【解决方案1】:

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

这就是您在表单中看到结果的原因

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

要解决这个问题,只需将负责打印的循环放在负责生成结果数组内容的循环之外(请记住,缩进不负责范围,但 {} 括号的位置是,所以移动一个 @987654324 @从打印循环前结束)。所以把你的代码改成

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】:

    因为您在外部 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);
        }
    }
    

    【讨论】:

    • 代码 sn-ps 用于可以通过浏览器(HTML/JavaScript/CSS)运行的代码示例。 Java 代码应放在代码示例中(在编辑器中由{} 表示)。
    【解决方案3】:

    代码应该是这样的:

       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
    

    【讨论】:

      猜你喜欢
      • 2023-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      相关资源
      最近更新 更多