Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.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 - Fatal编程技术网

我有四个数字的组合,我不想显示任何重复的组合。JAVA

我有四个数字的组合,我不想显示任何重复的组合。JAVA,java,Java,2 4 6 12和4 2 6 12在技术上不是一个组合,因为它们以不同的顺序包含相同的值,因此仅显示2 4 6 12 我不知道如何删除具有相同数字的组合 import java.util.Scanner; public class drawingStraws { public static void main(String[] args) { // TODO Auto-generated method stub int sum = 0; i

2 4 6 12和4 2 6 12在技术上不是一个组合,因为它们以不同的顺序包含相同的值,因此仅显示2 4 6 12

我不知道如何删除具有相同数字的组合

    import java.util.Scanner;
    public class drawingStraws {

     public static void main(String[] args) {
    // TODO Auto-generated method stub


    int sum = 0;
    int hour =0;
    int hourTwo=0;
    int hourThree=0;
    int hourFour=0;
    int x,m,d,f;
    System.out.println(" straw drawing program!\n straw1\tstarw2\tstraw3\tstraw4");

    for(x=1;x<=14;x++)
    {
        for(m=1;m<=14;m++)
        {
            for(d=1;d<=14;d++)
            {
                for(f=1;f<=14;f++)
                {
                    sum=0;
                        hour=x*x;
                    sum=sum+hour;   
                    hourTwo=m*m;
                    sum=sum+hourTwo;
                    hourThree=d*d;
                    sum=sum+hourThree;
                    hourFour=f*f;
                    sum=sum+hourFour;
                    if(sum==200)
                    {
                        if (x==m||x==d||x==f || m==x||m==d||m==f || d==x||d==f||d==m || f==m||f==d||f==x)
                        {
                            break;
                        }
                        else
                        {
                        System.out.println(x+"\t"+m+"\t"+d+"\t"+f);
                        }
                    }

                }
             } 
          }
        }

      }

    }
import java.util.Scanner;
公共类drawingStraws{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
整数和=0;
整小时=0;
int hourTwo=0;
int hourtree=0;
int hourFour=0;
int x,m,d,f;
System.out.println(“吸管绘图程序!\n straw1\tstarw2\tstraw3\tstraw4”);

对于(x=1;x如果你简化你的目标,那会很有帮助,因为我不知道你只想通过阅读你的代码来完成什么。你的问题似乎是的变体。解决这类问题的经典方法是使用排序,而不是输入[2 4 6 12]和[4 2 6 12]排序后会是一样的。

通常,如果您有复杂的问题,已经有一个库可以解决。请查看

//实例化这些组合;我们希望数字最多为14,一组4
组合组合集合=新组合(14,4);
//迭代每个组合,表示为int[]s
迭代器迭代器=combinationSet.Iterator();
while(iterator.hasNext()){
系统输出打印(“[”);
for(整数:iterator.next()){
系统输出打印(数字+“”);
}
System.out.println(“]);
}

Jade指出了一种解决问题的简单方法。然而,排序需要O(n logn)时间,而在m个集合上计算排序将使复杂性变得更糟

由于您使用的是Java,我建议您使用。它:

  • 访问时间为O(logn)
  • 不允许重复的元素
  • 允许您按自然顺序迭代元素,以比较它们并确定相等性

  • 结果的复杂性将是O(logn+n)=O(n)

    这似乎是一个家庭作业问题,所以使用外部库是一个大问题。@TheGreenColla是的,我在OP编辑所有家庭作业之前给出了答案。@amey91我没有足够的声誉在你的帖子下发表评论,所以我在这里回复你的帖子。TreeSet不是一个选项,因为Havocshot想要比较的元素是一个数组不只是一个整数。因此树集可能无法工作,因为如果不重写数组对象的hashcode方法,则不能将数组作为键。
    // Instantiate the Combinations; we want numbers up to 14 in sets of 4
    Combinations combinationSet = new Combinations(14, 4);
    
    // Iterate over each of the combinations, represented as int[]s
    Iterator<int[]> iterator = combinationSet.iterator();
    while(iterator.hasNext()) {
        System.out.print("[ ");
        for(int number : iterator.next()) {
            System.out.print(number + " ");
        }
        System.out.println("]");
    }