2011-11-18 120 views
0

在1类相同的I类使一个实例:两个构造函数在具有不同参数

db = new AdapterDB (cal, rcarbohydrate, rfat, rprotein, getApplicationContext()); 

在2 I类作出instace:

db = new AdapterDB (Bits, Truncation, Crossover, Mutation, Chromosomes, Generation, getApplicationContext()); 

在类AdapterDB我使构造:

private DatabaseHelper DBHelper; 
    private SQLiteDatabase db; 

    public AdapterDB(Context ctx) 
    { 
     this.context = ctx; 
     DBHelper = new DatabaseHelper (context); 
    } 

    double Truncation; 
    double Crossover; 
    double Mutation; 
    int Generation; 

    private Context context; 

    int indexOfChromosomes ; 
    int indexOfGens; 
    int gensNumber; 
    int chromosomesNumber; 

    String [][] population; 
    double [] fitnesstotal; 

    public AdapterDB(int Bits, double Truncation, double Crossover, double Mutation, int Chromosomes, int Generation, Context ctx) 
    { 
     this.indexOfGens = Bits; 
     this.Truncation = Truncation; 
     this.Crossover = Crossover; 
     this.Mutation = Mutation; 
     this.indexOfChromosomes = Chromosomes; 
     this.Generation = Generation; 
     this.context = ctx; 
     DBHelper = new DatabaseHelper (context); 

     population = new String[indexOfChromosomes][indexOfGens]; 
     fitnesstotal = new double [indexOfChromosomes]; 
    } 

double cal; 
    double rcarbohydrate; 
    double rfat; 
    double rprotein; 

    public AdapterDB(double cal, double rcarbohydrate, double rfat, double rprotein, Context ctx) 
    { 
     this.cal = cal; 
     this.rcarbohydrate = rcarbohydrate; 
     this.rfat = rfat; 
     this.rprotein = rprotein; 
     this.context = ctx; 
     DBHelper = new DatabaseHelper (context); 
    } 

在构造函数的值仍然存在,每个变量都有一个值,但是当我想在一些在类AdapterDB,cal,rcarbohydrate,rfat和rprotein的函数为零(0.0)为什么会发生这种情况?以及如何解决它?谢谢。

+1

你确定它是一样的吗? –

+0

是的,它仅在参数 – Michelle

+0

上有所不同您能描述导致问题的事件序列吗?涉及哪些类,如何创建实例,何时何地传递等等? –

回答

0

您可以使用this关键字调用另一个构造函数。

class Animal { 
    int weight; 
    String name; 

    Animal(int w) { 
     weight = w; 
    } 

    Animal(String n) { 
     this(10); // set the weight to 10 
     name = n; 
    } 
} 
+0

嗯,不。我的意思是说问题在于名称= n它没有任何价值 – Michelle

3

拇指任何编程新手要记住的一个很好的规则是来自有摆在首位好处:

What Is A Class? (From the Java Tutorials)

你AdapterDB类显然是试图一次是两件不同的事情。我猜你的调用使用第一个构造函数创建一个实例,但是期望其他值(由第二个构造函数设置)被填充。

什么你应该做的是使AdapterDB一个抽象类:

public abstract class AdapterDB { 

    private Context context; 
    private DBHelper dbHelper; 

    public AdapterDB(Context context) { 
     this.context = context; 
     this.dbHelper = new DBHelper(context); 
    } 

    public Context getContext() { 
     return context; 
    } 

    public DBHelper getDBHelper() { 
     return dbHelper; 
    } 
} 

然后,您可以为您的个人数据类型,你需要代表不同的类别:

public class GeneticAdapter extends AdapterDB { 

    int chromosomesNumber; 
    // ... And others 

    public GeneticAdapter(Context context, int numChromosomes, ...) { 
     super(context); 
     // Set your instance variables 
    } 
} 

还有一为了健身?

public class FitnessAdapter extends AdapterDB { 
    double cal; 
    // ... And others 

    public FitnessAdapter(Context context, double cal, ...) { 
     super(context); 
     // Set your instance variables 
    } 
} 

我很抱歉,如果这不是你要找的,你的问题有点难以理解。祝您好运,如果您有后续活动,请在下面评论(或编辑您的答案)。

+0

但是我想在一个课堂上做,可以吗? – Michelle

+0

技术上你可能会找到一种方式,但我认为这不是一个好主意。它会让你头痛。我知道你刚开始时很容易找到最简单,最快捷的解决方案,但请花时间做正确的事情。 –

+0

问题是如果我把它变成一些类,会有另一个错误,因为我的数据库也与数据库有关,上次我已经尝试过了,但是我解决不了这个错误,我没有太多时间> _ Michelle

1

这听起来像你正在创建两个单独的实例,并试图通过给它们相同的名称来合并它们。这不是Java的工作原理。

1类使用给定的参数生成adapterdb(称为db)。

2类使用给定的参数生成另一个adapterdb。

如果DB是某种类别的全局变量,这两个类都可以访问,则引用DB指向NEW对象,并且第一个对象是垃圾。对构造函数的第二次调用不会将两者合并在一起。

构造函数看起来像它们属于两个不同的类:通常,构造函数会将所有实例变量设置为至少某个默认值。

如果哟确实要“合并”这两个,我会用默认的构造函数,并把你有两种构建成较大的setter方法如下所示:

public AdapterDB(Context context) { 
    this.context = context; 
    this.dbHelper = new DBHelper(context); 
} 

public setFitness(double cal, double rcarbohydrate, double rfat, double rprotein, Context ctx) { 
    ... 
} 

public setGenetics(int Bits, double Truncation, double Crossover, double Mutation, int Chromosomes, int Generation, Context ctx) { 
    .... 
} 

然而,因为参数是如此不同,我会对你自己的班级结构保持警惕,我会看看克雷格提出的解决方案是不是一个更合适的选择。

+0

你可以给我一个使用默认构造函数的例子,并将两个构造变成大的setter方法吗? Thx u – Michelle

+0

他们怎么能成为setFitness和setGenetics?谢谢你 – Michelle

相关问题