Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java列表问题_Java_List_Equality - Fatal编程技术网

Java列表问题

Java列表问题,java,list,equality,Java,List,Equality,我试图编写一个方法,该方法接收字符串列表,并返回包含n个元素的子集。这是我的密码: import Pack; import java.util.List; import java.util.ArrayList; public class Testtt{ public static void main(String[] args) { List<String> input = new ArrayList<String>(); inp

我试图编写一个方法,该方法接收字符串列表,并返回包含n个元素的子集。这是我的密码:

import Pack;
import java.util.List;
import java.util.ArrayList;

public class Testtt{
    public static void main(String[] args) {
        List<String> input = new ArrayList<String>();
        input.add("a");
        input.add("b");
        input.add("c");
        input.add("d");
        input.add("e");

        System.out.println(subset(input, 3));
    }

    public static List<List<String>> subset( List<String> inputlist, int n) {
        List<List<String>> output = new ArrayList<List<String>>();
        List<String> temp = new ArrayList<String>();

        for (int i = 0; i < n; i++) {
                temp = inputlist;
                System.out.println("Temp = " +temp);
                temp.remove(i);
                output.add(temp);
        }

        return output;
    }
}
我在循环的开头写了temp=list,但它保持不变。为什么会发生这种情况?

for(int i=0;ifor (int i = 0; i < n; i++) {
                        temp = inputlist;
                        System.out.println("Temp = " +temp);
                        temp.remove(i);
                        output.add(temp);
                }
temp=输入列表; 系统输出打印项次(“Temp=“+Temp”); 移除温度(i); 输出。添加(温度); }
在这里,您将从临时arraylist中删除一个元素,并将其添加到输出arraylist中。现在,您正在保留temp的引用,并在同一temp arraylist上进行删除,这将导致您显示的输出。根据您的程序,显示的输出是正确的。如果需要,临时输出应该存储在输出数组列表中,只需创建数组列表的新实例并将其存储在输出中。

我无法理解此处的预期结果。 但有两个基本错误:

  • 您可以修改输入列表
  • 在索引循环中,可以从列表中删除元素。这将导致在迭代过程中跳过元素

  • 这就是为什么此代码删除a、c和e,而不是b和d。

    欢迎使用StackOverflow。关于代码中问题的问题必须包括代码,而不是指向外部站点(如pastebin)的链接。如果代码太长,您应该将其缩减到只显示问题的关键部分。请阅读并确认。您对您发布的代码有任何疑问吗?
    for (int i = 0; i < n; i++) {
                            temp = inputlist;
                            System.out.println("Temp = " +temp);
                            temp.remove(i);
                            output.add(temp);
                    }