【问题标题】:Java Code That Prints Reverse of Given ArrayList打印给定 ArrayList 的反向的 Java 代码
【发布时间】:2021-01-22 17:49:31
【问题描述】:

所以我试图编写一个返回给定 ArrayList 反向的方法,但它给了我索引错误,我不知道如何解决它。我感谢您的帮助。这是我的代码:

import java.util.ArrayList;

public class question2 {

public static ArrayList<Double> reverse(ArrayList<Double> arraylist) {
    ArrayList<Double> result = new ArrayList<Double>();
    for(int i=0; i<arraylist.size(); i++) {
        result.set((arraylist.size()) - 1 - i, arraylist.get(i));
    }
    return result;
}

public static void main(String[] args) {
    
    ArrayList<Double> doubles = new ArrayList<Double>();
    doubles.add(1.5);
    doubles.add(2.3);
    doubles.add(7.7);
    doubles.add(8.6);
    System.out.println(reverse(doubles));
    
}

}

这是错误:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 3 out of bounds for length 0

【问题讨论】:

  • 阅读set方法的文档。

标签: java exception arraylist compiler-errors indexoutofboundsexception


【解决方案1】:
public static ArrayList<Double> reverse(ArrayList<Double> arraylist) {
       ArrayList<Double> result = new ArrayList<Double>(arraylist.size());
        for(int i=arraylist.size()-1; i>=0; i—-) {
            result.add(arraylist.get(i));
        }
        return result;
     }

希望这会奏效!

【讨论】:

  • 我用 ArrayList result = ArrayList(arraylist.size()) 改变了第一部分,用 arraylist.add 改变了 arraylist.set 但它没有用。
  • 请点赞并将其标记为真实答案。提前致谢
  • 它仍然不起作用并抛出相同的异常(我只是复制粘贴)
  • 你可以使用 Collections.reverse(arraylis);
  • 我不会,我必须自己写,因为它是为了学校。
【解决方案2】:

你可以试试我的代码,它会为你工作

 public static List<Double> reverse(ArrayList<Double> arraylist) {
        List<Double> result = Arrays.asList(new Double[arraylist.size()]);
        for(int i=0; i<arraylist.size(); i++) {
            result.set((arraylist.size()) - 1 - i, arraylist.get(i));
        }
        return result;
    }

【讨论】:

  • 嗯,它给出了某种错误。但我想那是因为我没有导入需要的库。谢谢你的回答:)
【解决方案3】:
public static String reverse(ArrayList<Double> arraylist) {
ArrayList<Double> result = new ArrayList<Double>();
for(int i=arraylist.size() -1; i>=0; i--) {
    result.add(arraylist.get(i));
}
return result.toString();

}

reverse() 方法的返回类型应该是 char[] 或 String,因为您从 main 方法在控制台上打印

【讨论】:

    【解决方案4】:

    这是您可能想要尝试的东西。它不需要单独的List,循环次数仅为将整个列表复制到另一个列表的一半。

    当循环索引靠近中间时,它通过交换开头和结尾的值来工作。

    • 设置size = list.size();
    • 将循环从0 迭代到i &lt; size/2
    • i 的值保存到变量中。
    • i 的位置设置为size - i - 1 的值
    • size - i - 1的位置设置为保存的值。

    这将一直持续到循环到达中间。请注意,对于even 大小的列表,最里面的值是相邻的并交换的。对于odd 大小的列表,最里面的项目被忽略,因为它的位置正确。

    【讨论】:

    • 感谢您的回答。但我不能使用预先制作的方法,因为这是某种家庭作业。我必须自己写。不过还是谢谢:)
    • 是的,这也可以以不同的方式工作。感谢您的回答。我很感激。
    猜你喜欢
    • 2021-09-04
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 2015-09-06
    相关资源
    最近更新 更多