Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays_Duplicates - Fatal编程技术网

Java 修复了两种应该删除重复和反向顺序对的方法

Java 修复了两种应该删除重复和反向顺序对的方法,java,arrays,duplicates,Java,Arrays,Duplicates,只是学习和希望改变职业…我需要帮助纠正第二和第三种方法,以便它们正确打印!我能够一起破解(这花了很长时间),修复第二个和第三个方法需要什么代码? 我想让它工作起来,然后回去自学,因为这是我的学习方式 第二种和第三种方法都不正确地打印这些对:(5,5)(5,5)(6,4)(9,1) import java.util.*; 公共类十对{ 公共静态void main(字符串[]args){ inta[]={1,1,2,4,4,5,5,6,7,9}; findAllPairs(a,10); findUn

只是学习和希望改变职业…我需要帮助纠正第二和第三种方法,以便它们正确打印!我能够一起破解(这花了很长时间),修复第二个和第三个方法需要什么代码?

我想让它工作起来,然后回去自学,因为这是我的学习方式

第二种和第三种方法都不正确地打印这些对:(5,5)(5,5)(6,4)(9,1)

import java.util.*;
公共类十对{
公共静态void main(字符串[]args){
inta[]={1,1,2,4,4,5,5,6,7,9};
findAllPairs(a,10);
findUniquePairs(a,10);
findComboPairs(a,10);
}
//方法1-输出所有对将输出:[1,9],[1,9],[4,6],[4,6],[5,5],
// [5,5], [5,5], [5,5], [5,5],[5,5],[6,4],[6,4][9,1],[9,1]
静态void findAllPairs(int[]数组,int和){
System.out.println(“总和为“+sum+”:”)的所有对(包括重复和逆序对);
for(int i=0;i
有很多方法可以做到这一点。其中一种方法是从数组中创建一个
列表
,然后在处理列表时将使用的元素设置为
null

按如下方式操作:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class TenPairs {

    public static void main(String[] args) {
        int a[] = { 1, 1, 2, 4, 4, 5, 5, 5, 6, 7, 9 };
        findAllPairs(a, 10);
        findUniquePairs(a, 10);
        findComboPairs(a, 10);
    }

    static void findAllPairs(int[] array, int sum) {

        System.out.println("All pairs(including duplicates and reverse order pairs) whose sum is " + sum + ":");

        for (int i = 0; i < array.length; i++) {
            for (int j = i + 1; j < array.length; j++) {
                if (array[i] + array[j] == sum) {
                    System.out.println("(" + array[i] + "," + array[j] + ")" + "(" + array[j] + "," + array[i] + ")");
                }
            }
        }
    }

    static void findUniquePairs(int[] array, int sum) {

        System.out.println("All pairs only once(including reverse order pairs but excluding duplicates) whose sum is "
                + sum + ":");
        List<Integer> list = Arrays.stream(array).boxed().collect(Collectors.toList());
        int x = 0, y = 0;
        for (int i = 0; i < array.length; i++) {
            for (int j = i + 1; j < array.length; j++) {
                if (list.get(i) != null) {
                    x = list.get(i);
                }
                if (list.get(j) != null) {
                    y = list.get(j);
                }
                if (x + y == sum) {
                    if (x != y) {
                        System.out.println("(" + x + "," + y + ")");
                    }
                    System.out.println("(" + y + "," + x + ")");
                    list.set(i, null);
                    list.set(j, null);
                    x = 0;
                    y = 0;
                }
            }
        }
    }

    static void findComboPairs(int[] array, int sum) {

        System.out.println(
                "All pairs only once(excluding reverse order pairs and duplicates) whose sum is " + sum + ": ");
        List<Integer> list = Arrays.stream(array).boxed().collect(Collectors.toList());
        int x = 0, y = 0;
        for (int i = 0; i < array.length; i++) {
            for (int j = i + 1; j < array.length; j++) {
                if (list.get(i) != null) {
                    x = list.get(i);
                }
                if (list.get(j) != null) {
                    y = list.get(j);
                }
                if (x + y == sum) {
                    System.out.println("(" + x + "," + y + ")");
                    list.set(i, null);
                    list.set(j, null);
                    x = 0;
                    y = 0;
                }
            }
        }
    }
}

第二种方法和第三种方法之间的主要区别在于打印对的次数。在第二种方法中,必须打印对两次(一次按出现顺序打印,另一次按相反顺序打印),除非对具有相同元素。如有任何疑问/问题,请随时发表评论。

谢谢您的帮助!我对列表做了一些研究,但不确定如何实现它们。我对您建议的唯一问题是,第二种方法应该打印:[1,9],[4,6],[5,5],[6,4],[9,1],而第三种方法应该打印:[1,9],[4,6],[5,5],第二种方法的预期输出是什么?如果您能按照您对第二种方法输出的期望告诉我哪里出了问题,我可以进一步帮助您。方法2应该删除重复项,然后只输出唯一对一次,因此….[1,9],[4,6],[5,5],[6,4],[9,1]方法3应该删除重复项,同时删除逆序对,然后输出剩余的对,以便……[1,9][4,6][5,5]完成!如有任何进一步的疑问/问题,请随时发表评论。
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class TenPairs {

    public static void main(String[] args) {
        int a[] = { 1, 1, 2, 4, 4, 5, 5, 5, 6, 7, 9 };
        findAllPairs(a, 10);
        findUniquePairs(a, 10);
        findComboPairs(a, 10);
    }

    static void findAllPairs(int[] array, int sum) {

        System.out.println("All pairs(including duplicates and reverse order pairs) whose sum is " + sum + ":");

        for (int i = 0; i < array.length; i++) {
            for (int j = i + 1; j < array.length; j++) {
                if (array[i] + array[j] == sum) {
                    System.out.println("(" + array[i] + "," + array[j] + ")" + "(" + array[j] + "," + array[i] + ")");
                }
            }
        }
    }

    static void findUniquePairs(int[] array, int sum) {

        System.out.println("All pairs only once(including reverse order pairs but excluding duplicates) whose sum is "
                + sum + ":");
        List<Integer> list = Arrays.stream(array).boxed().collect(Collectors.toList());
        int x = 0, y = 0;
        for (int i = 0; i < array.length; i++) {
            for (int j = i + 1; j < array.length; j++) {
                if (list.get(i) != null) {
                    x = list.get(i);
                }
                if (list.get(j) != null) {
                    y = list.get(j);
                }
                if (x + y == sum) {
                    if (x != y) {
                        System.out.println("(" + x + "," + y + ")");
                    }
                    System.out.println("(" + y + "," + x + ")");
                    list.set(i, null);
                    list.set(j, null);
                    x = 0;
                    y = 0;
                }
            }
        }
    }

    static void findComboPairs(int[] array, int sum) {

        System.out.println(
                "All pairs only once(excluding reverse order pairs and duplicates) whose sum is " + sum + ": ");
        List<Integer> list = Arrays.stream(array).boxed().collect(Collectors.toList());
        int x = 0, y = 0;
        for (int i = 0; i < array.length; i++) {
            for (int j = i + 1; j < array.length; j++) {
                if (list.get(i) != null) {
                    x = list.get(i);
                }
                if (list.get(j) != null) {
                    y = list.get(j);
                }
                if (x + y == sum) {
                    System.out.println("(" + x + "," + y + ")");
                    list.set(i, null);
                    list.set(j, null);
                    x = 0;
                    y = 0;
                }
            }
        }
    }
}
All pairs(including duplicates and reverse order pairs) whose sum is 10:
(1,9)(9,1)
(1,9)(9,1)
(4,6)(6,4)
(4,6)(6,4)
(5,5)(5,5)
(5,5)(5,5)
(5,5)(5,5)
All pairs only once(including reverse order pairs but excluding duplicates) whose sum is 10:
(1,9)
(9,1)
(4,6)
(6,4)
(5,5)
All pairs only once(excluding reverse order pairs and duplicates) whose sum is 10: 
(1,9)
(4,6)
(5,5)