【问题标题】:Using a "for each" loop to reverse an ArrayList in Java在 Java 中使用“for each”循环来反转 ArrayList
【发布时间】:2018-09-25 00:28:48
【问题描述】:

我无法为家庭作业问题创建一种方法来反转 ArrayListin 到位,例如 1 2 3 4 5 将变为 5 4 3 2 1。我知道 Collections.reverse,但我不能使用它,我不能使用常规的 for 循环,它必须是一个“for each”循环,所以“for (String book: books) { ... }”。我知道使用常规 for 循环我将能够使用两个迭代变量 ij 以便我可以交换第一个和最后一个索引的值来反转它,但是在每个循环中你不能去做。任何帮助,将不胜感激。谢谢。

【问题讨论】:

  • 鉴于你所说的限制,我不得不问,这是作业吗?如果是的话,你应该提到这一点。家庭作业不会自动取消 SO 的资格,如果你说是,人们往往会给出更有帮助的提示来教你,而不是在没有解释的情况下放弃解决方案。
  • 发布您到目前为止所做的代码(甚至是伪代码)。建议 #1:尝试使用常规 for 循环解决它,然后尝试查看如何将其转换为 for-each(不一样,我知道)。推荐#2:stackoverflow.com/questions/1098117/…
  • 提示:您仍然可以在循环外声明int 计数器并将它们作为循环体的一部分递增。
  • 提示:ArrayList.size() 为您提供数组列表中的对象数量
  • 自从我发布我的第一条评论以来,有几个答案提出了这个问题:你是否必须就地反转列表?也就是说,鉴于ArrayList al,你是需要反转 al 本身的顺序,或者您是否允许创建并返回与 al 顺序相反的 new 数组? 您是否只需要打印原始数组的反转(如 bakero98 那样)?对问题和目标的明确陈述对于编写正确的事情必不可少

标签: java arraylist methods reverse


【解决方案1】:

您可以使用 forEach 语法来做到这一点。

List<Integer> intValues = new ArrayList<Integer>();
intValues.add(1);
intValues.add(2);
intValues.add(3);
intValues.add(4);
intValues.add(5);


 IntStream.range(0, intValues.size()).forEach(v -> System.out.print(intValues.get((intValues.size()-1)-v)));

【讨论】:

    【解决方案2】:

    这是使用for each 的示例,您在arrayList 中创建包含字符串数量的变量,然后使用常规for each 循环遍历整个arrayList,但您在位置i 上打印并每次递减i

    int i = books.size() - 1;
    for(String b: books){
     newList.add(books[i]);
     System.out.println(books[i]);
    i--;
    }
    

    这是在一个arrayList中切换的示例。

    int i = books.size() - 1;
    String helpString;
    for(int n = 0; n <= books/2 ; n++){
    helpString = books[n];
    books[n] = books[i];
    books[i] = helpString;
    
    i--;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多