-5

有人可以给我这个代码的详细解释,并告诉我为什么它会打印出它打印的输出。这是我的测试的示例练习题。我真的不擅长这些方法和类部分。所以假设我对这个主题知之甚少。请逐行解释并告诉我值的变化。因此,如果测试中出现类似的问题,我将能够做到。输出为apples,grapes,pears,kiwi,oranges,pears,pears,grapes,oranges,20

public Purchase questionSampleInClass(Purchase p1, int newX) {
    newX=30
    Purchase p2= new Purchase("banana", 5, 4.50, 12);
    Purchase p3= new Purchase("plum", 6, 5.50, 10);
    p1=p2;
    p3=this;
    p3.setName("pears");
    p1.setName("oranges");
    p1 = new Purchase("kiwi", 6, 3.00, 3);
    System.out.println(this.getName());
    System.out.println(p2.getName());
    System.out.println(p3..getName());
    return p2;
}

public class PurhaseDemoClassProblem {
    public static void main(String{} args) {
        Purchase oneSale= new Purchase("apples", 4, 3.50, 6);
        Purchase twoSale= new Purchase("grapes", 8, 1.99, 4);
        Purchase threeSale;
        int x=20;
        System.out.println(oneSale.getName());
        Syste,.out.println(twoSale.getName());
        threeSale= oneSale.questionSampleInClass(twoSale, x);
        System.out.println(oneSale.getName());
        System.out.println(twoSale.getName());
        System.out.println(threeSale.getName());
        System.out.println(x);
    }
}
4

2 回答 2

2

程序的执行从 main() 方法开始,所以让我们从那里开始。

前两行:

Purchase oneSale= new Purchase("apples", 4, 3.50, 6);
Purchase twoSale= new Purchase("grapes", 8, 1.99, 4);

创建两个分配了一些值的购买对象。(name="apples", "grapes") 我们没有足够的细节来了解其他值是什么。

第三行创建了第三个购买对象,没有分配任何值。

Purchase threeSale;

Int x=20 只需将值 20 分配给名为 x 的整数变量。

接下来的两行将前两个 Purchase 对象的名称打印到控制台。(“苹果”、“葡萄”)

System.out.println(oneSale.getName());
System.out.println(twoSale.getName());

下一行 threeSale= oneSale.questionSampleInClass(twoSale, x); 调用 oneSale 购买对象上的 questionSampleInClass() 方法。它在方法调用中传递两个参数:twoSale Purchase 对象和整数 x

questionSampleInClass()方法中,第一个命令 newX=30将值从 20 更改为 30。 但这是您的测试的一个技巧,30 的值仅对 questionSampleInClass() 方法中的变量 newX 是正确的。变量 x 的值保持不变,为 20。

Purchase p2= new Purchase("banana", 5, 4.50, 12);
Purchase p3= new Purchase("plum", 6, 5.50, 10);

再创建两个名为“banana”和“plum”的购买。

p1=p2;

将 p2(“香蕉”)引用的 Purchase 对象分配给 p1。它作为“葡萄”购买进入方法,但现在分配给“香蕉”购买对象。

p3=this;

重新分配 p3 Purchase 变量以引用与我们的 oneSale 相同的对象。p3 变量现在引用“apple”购买对象。“李子”对象丢失了。

p3.setName("pears");

此命令将“apple”Purchase 对象的名称更改为“pears”。注意:p3 变量指向与 oneSale Purchase 对象相同的对象。

p1.setName("oranges");

将 p1 引用的 Purchase 对象的名称从“banana”更改为“oranges”。注意:这也是变量 p2 引用的同一对象。

p1 = new Purchase("kiwi", 6, 3.00, 3);

p1 变量被分配给一个名为“kiwi”的新创建的 Purchase 对象</p>

System.out.println(this.getName());

将当前对象的名称打印到控制台。价值是“梨”。
“this”是我们的 oneSale 变量,因为我们在 oneSale 对象上调用了这个方法。oneSale.questionSampleInClass(twoSale,x);

System.out.println(p2.getName());

打印 p2 引用的 Purchase 对象的名称:“oranges”</p>

System.out.println(p3.getName());

打印 p3 引用的 Purchase 对象的名称:“pears”</p>

questionSampleInClass() 方法然后返回到 main() 并将 p2“pear”对象分配给 threeSale。

回到 main()…</p>

System.out.println(this.getName());

打印出 oneSale 的名称。“梨”。 请记住,该值已由 p3.setName(“pears”) 更改,该值被分配给与 oneSale 的“this”相同的对象。

System.out.println(twoSale.getName());

打印出两个销售名称“grapes”。 在其他方法中该值从未改变,因为我们将参数 p1 更改为指向不同的对象 p1=p2; 命令。

 System.out.println(threeSale.getName());

打印出threeSale Purchase 对象的名称:“oranges”。 它是我们在返回 p2 中分配的 p2 对象;陈述。

最后,

System.out.println(x);

打印出 x 的值。这是“20”。 X was not really changed in the other method because it was passed in as a scalar parameter value.

于 2013-08-02T22:04:57.680 回答
0

希望这将帮助您通过测试。请注意,我没有给您您所要求的答案,而是指出了一些可能对您的任务有所帮助的关键事项。

public class Purchase {

        private String name;

        public Purchase(String name, int something, double price, int somethingElse) {
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Purchase questionSampleInClass(Purchase p1, int newX) {
            newX = 30;//set newX passed in parameter to value 30
            Purchase p2 = new Purchase("banana", 5, 4.50, 12);//create new instance of Purchase
            Purchase p3 = new Purchase("plum", 6, 5.50, 10);//create another new instance of Purchase
            p1 = p2;//p1, the passed in parameter will now be assigned equal to p2
            p3 = this;//p3 becomes assigned to the instance which called the method questionSampleInClass
            p3.setName("pears");//p3's name will be changed from plum to pears
            p1.setName("oranges");//p1's name will be changed from banana(remember it was assigned p2) to oranges
            p1 = new Purchase("kiwi", 6, 3.00, 3);//a new instance of Purchase is assigned to p1, wiping out the change made in the previous line
            System.out.println(this.getName());
            System.out.println(p2.getName());
            System.out.println(p3.getName());
            return p2;
        }
    }

public class PurchaseDemoClassProblem {

        public static void main(String[] args) {
            Purchase oneSale= new Purchase("apples", 4, 3.50, 6);
            Purchase twoSale= new Purchase("grapes", 8, 1.99, 4);
            Purchase threeSale;
            int x=20;
            System.out.println(oneSale.getName());
            System.out.println(twoSale.getName());
            threeSale = oneSale.questionSampleInClass(twoSale, x);
            System.out.println(oneSale.getName());
            System.out.println(twoSale.getName());
            System.out.println(threeSale.getName());
            System.out.println(x);
        }
    }
于 2013-08-02T21:06:55.270 回答