【问题标题】:I want check each element in the stack collection and print it in reverse. the print out should print each element as long as its in ascending order我想检查堆栈集合中的每个元素并反向打印。打印输出应该按升序打印每个元素
【发布时间】:2021-09-03 21:10:24
【问题描述】:

任务是反向打印。每个元素的大小都比前一个大。所以当订单被打乱时它应该停止。

public class Program {
    private void printWordRun(ArrayList<String> words) {

        
        for(int i = words.size() - 1; i > 0; i--) {
            String str = words.get(i);
            if(str.length() < words.size()) {
                System.out.println(str);
            }

        }
}

 public static void main(String[] args) {
        Program program = new Program();
        program.testPrintWordRun();
}

private void testPrintWordRun() {
        ArrayList<String> words = new ArrayList<>();
        words.add("I");
        words.add("am");
        words.add("cat");
        words.add("with");
        words.add("happy");
        words.add("dog");
        words.add("sitting");

        System.out.println("Testing printWordRun...");
        printWordRun(words);
        System.out.println();
    }
}

打印应该是:

开心 和 猫 是 我

我明白了:

狗 快乐的 和 猫 是 我

【问题讨论】:

  • 你的意思是每个元素都比前一个元素大一个?。据我了解,如果字符串的长度比下一个小一,您想打印。
  • 我的任务是实现 printWordRun 以便打印从输入列表的开头开始运行的任何单词,单词。单词 run 应该以相反的顺序打印,每个单词单独一行。打印输出:“快乐”、“与”、“猫”、“我”、“我”。所以你可以看到每个单词的字母数比下一个大一个。我在代码中编写了 for 循环。我执行代码时的打印输出是:'dog'、'happy'、'with'、'cat'、'am'、'i'。

标签: java data-structures methods stack recursive-datastructures


【解决方案1】:

从最后一个 before 元素开始,检查当前字符串的长度是否比下一个小一。如果是,请打印出来。

for(int i = words.size() - 2; i >= 0; i--) {
    String str = words.get(i);
    if(str.length() ==  words.get(i + 1).length() - 1) {
         System.out.println(str);
    }
}

【讨论】:

  • 运行您的代码后,我在线程“main”java.lang.IndexOutOfBoundsException 中得到了这个 ErrorException:索引 7 超出长度 7 的范围
【解决方案2】:

为了检查当前字符串的长度是否大于前一个字符串的长度,我们需要获取前一个字符串及其长度:

if (str.length() > words.get(i-1).length())

使用时:

if(str.length() < words.size())

您实际上是在检查当前字符串的长度是否大于ArrayList words 的大小。


此外,检查订单是否被打乱不应反过来进行。如果它是相反的输出应该是:

sitting
dog

您可能希望在printWordRun 中创建一个新列表,其中包含words 中的所有元素,直到顺序被打乱,然后反向打印。

伪代码:

// The output always contains the first word
list reverseList (words[0]);

// start from the second word
for(word in words)
    if word.size == previous_word.size - 1 -> add word to reverse

// start from the end of reverse
for(word in reverse)
    print word

【讨论】:

  • 我无法更改作为作业一部分的 arraylist 方法。它相当容易,但不适合像我这样的新手。感谢您的输入。帮助我打破了心理障碍,但我仍在努力按照作业期望获得列表顺序。我将循环更改为: for(int i =0; i
  • 我的意思是,在printWordRun 方法中,您可以创建一个新列表,并将words 列表中的所有字符串添加到其中,直到顺序中断。然后,您可以从最后一个元素打印该新列表 :)
  • 另外,如果您将循环更改为从头开始运行,请检查您是否将当前字符串与下一个字符串 (i+1) 进行比较,而不是与前一个字符串进行比较。
  • 我必须根据分配指南使用 for 循环。我如何创建变量,第一个是第一个索引,第二个变量是下一个变量来逐个比较它们并打印列表?
  • 所以第一个变量可能是当前单词的索引,下一个变量将是前一个单词 - 这样您就可以检查大小是否不会破坏顺序。 (我添加了伪代码以使我的想法更清晰:))
猜你喜欢
  • 2014-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-27
  • 2022-01-25
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
相关资源
最近更新 更多