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

在Java中创建数据类型时,构建构造函数以创建两个不同数组作为每个实例的一部分的最佳方法是什么?

在Java中创建数据类型时,构建构造函数以创建两个不同数组作为每个实例的一部分的最佳方法是什么?,java,arrays,constructor,Java,Arrays,Constructor,这是我正在做的一个算法课程项目: 任务是构建一个数据类型,表示宇宙中的传统数学集。操作数据类型所包含的方法包括并集、交集等,它们需要在类/数据类型的两个实例之间进行比较。本课程希望我通过创建一个布尔数组来表示实际集合,这非常简单,如果您获取实际集合的数组,将其复制到相同长度的布尔数组,并根据集合中存在的值切换为true或false。以下是我得出的结论: public class MathSET{ private int size = 0; private Boolean[] c

这是我正在做的一个算法课程项目:

任务是构建一个数据类型,表示宇宙中的传统数学集。操作数据类型所包含的方法包括并集、交集等,它们需要在类/数据类型的两个实例之间进行比较。本课程希望我通过创建一个布尔数组来表示实际集合,这非常简单,如果您获取实际集合的数组,将其复制到相同长度的布尔数组,并根据集合中存在的值切换为true或false。以下是我得出的结论:

public class MathSET{

    private int size = 0;
    private Boolean[] currentSet;
    private Character[] universe;

    public MathSET(Character[] uni){
        if (uni.length == 0){
            System.out.println("Set cannot be created, universe cannot be null.");
        } else{
            universe = createUni(uni);
            currentSet = new Boolean[universe.length];
                for (int i = 0; i < universe.length; i++){
                    currentSet[i] = false;
                }
            }
    }
公共类数学集{
私有整数大小=0;
私有布尔[]当前集;
私人性质[]宇宙;
公共数学集(字符[]uni){
如果(单位长度==0){
System.out.println(“无法创建集合,宇宙不能为null”);
}否则{
宇宙=createUni(uni);
currentSet=新布尔值[universe.length];
for(int i=0;i
createUni产生了一个方法,该方法在返回universe数组之前对数组进行排序、删除重复项并调整大小,currentSet被创建为一个布尔数组,所有值都设置为“false”

我最大的问题是,我无法调用补码方法,该方法应该返回一个新的MathSET实例,其值不包括在当前集合中。我可以用表示补码的正确值创建一个数组,但我无法创建一个新的MathSET(布尔数组)使用相同的通用数组。我还发现,当比较两个数据类型实例的universe数组以确保它们实际上是可比较的时,比较(comparable.universe!=this.universe)总是会得出两个数组不相等且无法比较的结果

我知道问题出在我的构造函数的某个地方,也可能出在我变量的性质上,但我看不清楚它是什么。为了进一步澄清,我已经确认createUni方法确实创建了一个具有正确值的排序数组,并删除了重复项,而且当两个不同的insta并排打印时假设包含相同通用数组值的数学集在打印时相等,只是在比较时不相等

编辑:因为有人要求补足法:

public MathSET complement(){
    /**Creates a new MathSET boolean array that starts out empty, iterates through current MathSET currentSET array and adds 
    */
    MathSET complement = new MathSET(universe);
    StringBuilder comp = new StringBuilder("Complement to current set: ");
    for (int i = 0; i < currentSet.length; i++){
        if (this.currentSet[i] == false){
            complement.currentSet[i] = true;
            comp.append(complement.currentSet[i] + ", ");
        }
    }

    System.out.println(comp);
    return complement;
}
公共数学集补码(){
/**创建一个新的MathSET布尔数组,该数组开始为空,遍历当前MathSET currentSET数组并添加
*/
数学集补码=新的数学集(宇宙);
StringBuilder comp=新的StringBuilder(“对当前集合的补充:”);
对于(int i=0;i
你能显示
补码方法吗?你在问题上标记的“多个构造函数”在哪里?你只显示了一个。听起来第二个构造函数的签名应该是
字符[]uni,布尔[]currentSet
添加了请求的方法并修复了标记。它本应仅为构造函数,感谢您指出@Michael。您所说的“但我无法使用相同的通用数组创建新的数学集(布尔数组)”是什么意思?您确实在此处创建了一个新的数学集:
数学集补码=新的数学集(宇宙);
。你的
补码
方法到底出了什么问题?我发现,它在我的主方法中是一个不正确的调用方法。我还摆弄了宇宙数组比较和使用数组。equals()解决了我关于并集和交集方法的通用数组比较的问题。非常感谢你们的帮助。你能展示
补码
方法吗?你标记问题的“多个构造函数”在哪里?你只展示了一个。听起来第二个构造函数的签名应该是
字符[]uni,Boolean[]currentSet
添加了请求的方法并修复了标记。它本应仅为构造函数,感谢您指出@Michael。您所说的“但我无法使用相同的通用数组创建新的数学集(布尔数组)”是什么意思?您确实在此处创建了一个新的数学集:
数学集补码=新的数学集(universe);
。你的
补码
方法到底出了什么问题?我发现,它在我的主方法中是一个不正确的调用方法。我还处理universe数组比较和使用数组。equals()使用并集和交集方法的通用数组比较解决了我的问题。非常感谢你们的帮助。