方法对象返回相同的值java

时间:2014-12-27 14:17:55

标签: java arrays loops methods

我在循环中的对象中运行方法存在问题,它保存相同的值,我的方法mutasi()在循环中调用它时给出相同的结果。当我试图打印方法本身内的所有结果时没有出错,但是当我将它保存在数组后代时,它返回相同的值。有什么建议吗?

代码:

public class Offspringset {

Individu[] offspring;
int lamdhapermiu; //recommend 7miu
Individu tempmutan;

public Offspringset(Parentset parentset, int lamdhapermiu,int miu) {
    this.lamdhapermiu = lamdhapermiu;
    this.offspring = new Individu[lamdhapermiu*miu];
    int lamdhacount=0;

    for(int i=0;i<miu;i++){

        for(int j=0;j<lamdhapermiu;j++){
            Individu tempindividu=new Individu(parentset.parent[i]);

            //tempindividu=parentset.parent[i];
            tempindividu.setId("C"+(lamdhacount+1));
            tempindividu.parent=parentset.parent[i].parent;
            Individu temp=new Individu(tempindividu);
            temp.mutasi();
            tempindividu=temp;
            this.offspring[lamdhacount]=tempindividu;


            lamdhacount++;
        }


    }

    System.out.println("--------------child--------------------");
    for (int i = 0; i < lamdhapermiu*miu; i++) {
        System.out.printf(" "+this.offspring[i].getId());
        for (int j = 0; j < 18; j++) {
            System.out.printf("| %.4f", this.offspring[i].chromosome[j]); //it returns wrong

        }
        System.out.println("");


    }
}

结果:

 C1| 1.6606| 3.9865| 6.5703| 1.4477| 3.5736| 7.2361| 0.9644| 4.1887| 3.4248| 0.9027| 0.5009| 0.9281| 0.4051| 0.9037| 0.5211| 0.0462| 0.8732| 0.9393
 C2| 1.6606| 3.9865| 6.5703| 1.4477| 3.5736| 7.2361| 0.9644| 4.1887| 3.4248| 0.9027| 0.5009| 0.9281| 0.4051| 0.9037| 0.5211| 0.0462| 0.8732| 0.9393
 C3| 1.6606| 3.9865| 6.5703| 1.4477| 3.5736| 7.2361| 0.9644| 4.1887| 3.4248| 0.9027| 0.5009| 0.9281| 0.4051| 0.9037| 0.5211| 0.0462| 0.8732| 0.9393
 C4| 1.5136| 4.6995| 4.0775| 1.5884| 3.5905| 5.7202| 1.7121| 2.9318| 7.1751| 0.3659| 0.8514| 0.7796| 0.4205| 0.3340| 0.2582| 0.3790| 0.2445| 0.6477
 C5| 1.5136| 4.6995| 4.0775| 1.5884| 3.5905| 5.7202| 1.7121| 2.9318| 7.1751| 0.3659| 0.8514| 0.7796| 0.4205| 0.3340| 0.2582| 0.3790| 0.2445| 0.6477
 C6| 1.5136| 4.6995| 4.0775| 1.5884| 3.5905| 5.7202| 1.7121| 2.9318| 7.1751| 0.3659| 0.8514| 0.7796| 0.4205| 0.3340| 0.2582| 0.3790| 0.2445| 0.6477
 C7| 1.5548| 3.3704| 1.9704| 1.2909| 3.2797| 6.5624| 1.8093| 3.4153| 4.0156| 0.8202| 0.3824| 0.2515| 0.5027| 0.5620| 0.9876| 0.8433| 0.4102| 0.7697
 C8| 1.5548| 3.3704| 1.9704| 1.2909| 3.2797| 6.5624| 1.8093| 3.4153| 4.0156| 0.8202| 0.3824| 0.2515| 0.5027| 0.5620| 0.9876| 0.8433| 0.4102| 0.7697
 C9| 1.5548| 3.3704| 1.9704| 1.2909| 3.2797| 6.5624| 1.8093| 3.4153| 4.0156| 0.8202| 0.3824| 0.2515| 0.5027| 0.5620| 0.9876| 0.8433| 0.4102| 0.7697
 C10| 1.5419| 2.8423| 2.9715| 1.8464| 3.0915| 6.4773| 1.5050| 3.6399| 1.6165| 0.4277| 0.0204| 0.2619| 0.6590| 0.2884| 0.3991| 0.7292| 0.7240| 0.7339
 C11| 1.5419| 2.8423| 2.9715| 1.8464| 3.0915| 6.4773| 1.5050| 3.6399| 1.6165| 0.4277| 0.0204| 0.2619| 0.6590| 0.2884| 0.3991| 0.7292| 0.7240| 0.7339
 C12| 1.5419| 2.8423| 2.9715| 1.8464| 3.0915| 6.4773| 1.5050| 3.6399| 1.6165| 0.4277| 0.0204| 0.2619| 0.6590| 0.2884| 0.3991| 0.7292| 0.7240| 0.7339
 C13| 1.5365| 3.7929| 6.8675| 2.0287| 4.0303| 4.4369| 2.4485| 3.4018| 4.1677| 0.4773| 0.4532| 0.3529| 0.8249| 0.5309| 0.9743| 0.9907| 0.3117| 0.0450
 C14| 1.5365| 3.7929| 6.8675| 2.0287| 4.0303| 4.4369| 2.4485| 3.4018| 4.1677| 0.4773| 0.4532| 0.3529| 0.8249| 0.5309| 0.9743| 0.9907| 0.3117| 0.0450
 C15| 1.5365| 3.7929| 6.8675| 2.0287| 4.0303| 4.4369| 2.4485| 3.4018| 4.1677| 0.4773| 0.4532| 0.3529| 0.8249| 0.5309| 0.9743| 0.9907| 0.3117| 0.0450

mutasi()方法:

public void mutasi() {

    for (int i = 0; i < 9; i++) {
        double N = Math.random();
        double temp;

        temp = this.chromosome[i] + this.chromosome[i + 9] * N;
        this.chromosome[i] = temp;
    }
    this.printchromosome(); //this print result right

    //System.out.printf("+(");
}

结果:

  | 1.3537| 3.4028| 5.8037| 1.1074| 2.9021| 7.0337| 0.9290| 3.4556| 2.9172| 0.9027| 0.5009| 0.9281| 0.4051| 0.9037| 0.5211| 0.0462| 0.8732| 0.9393
| 1.4021| 3.5828| 6.3855| 1.1941| 3.5688| 7.0893| 0.9464| 3.8476| 3.0895| 0.9027| 0.5009| 0.9281| 0.4051| 0.9037| 0.5211| 0.0462| 0.8732| 0.9393
| 1.6606| 3.9865| 6.5703| 1.4477| 3.5736| 7.2361| 0.9644| 4.1887| 3.4248| 0.9027| 0.5009| 0.9281| 0.4051| 0.9037| 0.5211| 0.0462| 0.8732| 0.9393
| 0.9910| 3.5737| 3.2226| 1.0655| 3.3229| 5.4214| 1.2509| 2.6832| 6.6942| 0.3659| 0.8514| 0.7796| 0.4205| 0.3340| 0.2582| 0.3790| 0.2445| 0.6477
| 1.2665| 3.9124| 3.7090| 1.3724| 3.5358| 5.6115| 1.4296| 2.7904| 7.0733| 0.3659| 0.8514| 0.7796| 0.4205| 0.3340| 0.2582| 0.3790| 0.2445| 0.6477
| 1.5136| 4.6995| 4.0775| 1.5884| 3.5905| 5.7202| 1.7121| 2.9318| 7.1751| 0.3659| 0.8514| 0.7796| 0.4205| 0.3340| 0.2582| 0.3790| 0.2445| 0.6477
| 0.9256| 3.0435| 1.6178| 1.1447| 3.1867| 5.9332| 0.9231| 2.9944| 3.2427| 0.8202| 0.3824| 0.2515| 0.5027| 0.5620| 0.9876| 0.8433| 0.4102| 0.7697
| 1.2763| 3.0614| 1.7924| 1.2444| 3.2046| 5.9892| 1.2278| 3.2749| 3.6367| 0.8202| 0.3824| 0.2515| 0.5027| 0.5620| 0.9876| 0.8433| 0.4102| 0.7697
| 1.5548| 3.3704| 1.9704| 1.2909| 3.2797| 6.5624| 1.8093| 3.4153| 4.0156| 0.8202| 0.3824| 0.2515| 0.5027| 0.5620| 0.9876| 0.8433| 0.4102| 0.7697
| 1.2030| 2.8134| 2.7439| 1.4461| 2.7947| 6.0430| 1.3756| 3.1954| 0.9816| 0.4277| 0.0204| 0.2619| 0.6590| 0.2884| 0.3991| 0.7292| 0.7240| 0.7339
| 1.4196| 2.8308| 2.8237| 1.7483| 2.9691| 6.1715| 1.4428| 3.6352| 1.2668| 0.4277| 0.0204| 0.2619| 0.6590| 0.2884| 0.3991| 0.7292| 0.7240| 0.7339
| 1.5419| 2.8423| 2.9715| 1.8464| 3.0915| 6.4773| 1.5050| 3.6399| 1.6165| 0.4277| 0.0204| 0.2619| 0.6590| 0.2884| 0.3991| 0.7292| 0.7240| 0.7339
| 1.0095| 3.0884| 6.5031| 1.0802| 3.4282| 2.8938| 1.4719| 3.0121| 4.1108| 0.4773| 0.4532| 0.3529| 0.8249| 0.5309| 0.9743| 0.9907| 0.3117| 0.0450
| 1.0731| 3.3825| 6.8218| 1.6030| 3.5273| 3.7966| 1.4901| 3.3131| 4.1389| 0.4773| 0.4532| 0.3529| 0.8249| 0.5309| 0.9743| 0.9907| 0.3117| 0.0450
| 1.5365| 3.7929| 6.8675| 2.0287| 4.0303| 4.4369| 2.4485| 3.4018| 4.1677| 0.4773| 0.4532| 0.3529| 0.8249| 0.5309| 0.9743| 0.9907| 0.3117| 0.0450

1 个答案:

答案 0 :(得分:0)

使用Individu创建Individu tempindividu=new Individu(parentset.parent[i]);实例时,您正在使用构造函数将chromosome数组的引用从源Individu复制到新创建的{ {1}}:

Individu

这意味着使用此构造函数创建的所有public Individu(Individu ind) { this.setId(ind.id); this.chromosome = ind.chromosome; this.parent = null; } 实例共享相同的Individu数组,并且更改其中一个实例将更改所有实例。

您应该为每个实例创建不同的chromosome数组。例如:

chromosome