当前位置: 首页 > 知识库问答 >
问题:

在一个方法中调用相同的参数,需要不同的结果

吕鸿文
2023-03-14

当我运行方法时,结果1和2是相同的,我需要结果是不同的数据集,因为我通过不同的数据集。

这是我目前所掌握的。

public class Stat {

    private double[] data;
    
    public Stat() {
        
        double[] stat = new double[1]; 
        stat[0] = 0.0;
    }
    
    public Stat(double[] d) {
        double[] newData = new double[d.length];
        newData=d;
        data=newData;
        }

    public String toString() {
        String toString="[";
         for(int i=0; i<data.length-1; i++) {
             toString = toString + data[i] + ", ";
             
          }
        return toString;

    }
}

而主要的方法代码是:

public class StatTester {

    public static void main(String[] args) {
        double[] data = {10.0, 20.0, 30.0};
        Stat stat1 = new Stat(data);
        data[0] = 100.0;
        data[1] = 200.0;
        data[2] = 300.0;
        Stat stat2 = new Stat(data);
        System.out.println("stat1 data = " + stat1.toString());
        System.out.println("stat2 data = " + stat2.toString());
        System.out.println("The two arrays should be different");

结果在两个相同的数据集[100.0,200.0,300.0]时打印stat1和stat。

我需要stat 1为10.0、20.0、30.0和stat 2为100.0、200.0、300.0

我试图改变…的命令

newData=d;
data=newData;

data=newData;
newData=d;

但这给了我同样的结果。我如何解决这个问题?

共有1个答案

端木狐若
2023-03-14

这是因为您只将参数中传递的数组的引用分配给stat构造函数,因此stat中的data实例变量和main中的data局部变量都指向同一个数组,并且更新main方法中的数组会更新stat类中的data引用的数组。

public Stat(double[] d) {
    double[] newData = new double[d.length];
    newData=d; // here
    data=newData; //here
}

因此,您需要复制传递的数组,以便更改作为参数传递的数组不会更新stat类中引用的数组,如下所示:

public Stat(double[] d) {
    data = Arrays.copyOf(d, d.length);
}
 类似资料:
  • 在下面的代码中,我编写了两种方法: 将变量定义为String的变量 根据键入的内容返回两种不同结果的方法 我有一个名为的变量在中,而中的参数被命名为。在中,我使用而不是-为什么这样工作? 调用方法时,参数是否无关紧要? 我知道,当输入一个返回某个内容的方法时,必须对其进行定义,参数进一步定义该方法将要处理的内容,因此,我假设,当从另一个方法调用所述方法时,必须使用相同的参数,但情况似乎并非如此。

  • 我在Java中有两个几乎相同的方法。唯一的区别是它们有不同的参数类型。它们使用泛型并返回输入参数的类型T。我怎样才能摆脱重复的代码?下面是我的两个方法。最后,它们都使用不同的类型调用Spring。否则,方法是相同的。

  • 问题内容: 有没有一种方法可以使存根方法在后续调用中返回不同的对象?我想这样做是为了测试来自的不确定响应。即,不管方法的返回顺序如何进行测试,结果都保持恒定。 我要测试的代码看起来像这样。 问题答案: 你可以使用方法来做到这一点(与链接时): 或使用等效的静态doAnswer方法:

  • 问题内容: 在Bruce Eckel的“ Thinking In Java,第四版”的第428页(有关类型信息的章节)中,具有以下示例: 也许我有点累,但是我看不到add()方法中对add()的调用是如何工作的。我一直认为它应该有一个引用,或者是一个静态方法(并且我在ArrayList或List中找不到静态add())。我想念什么? 我只是为自己测试,发现这可行: 问题答案: Java为这样的方法

  • 我正在编写一个具有广泛单元测试覆盖率的应用程序。 我使用Mockito来模拟我的类。 来自()世界,在这个世界中,我可以使用链接调用,以便在后续调用中返回不同的值。 我希望这能奏效。 然而它抛出: 有更好的办法吗?

  • Swagger用相同的路径和方法但不同的参数覆盖方法 我有一个带有Spring Boot 2.3.5.RELEASE,webflux和springfox 3.0.0的应用程序。我开发了两个具有相同路径但参数不同的GET方法,一个不接收参数并返回list,另一个返回findAll。 情况是,Swagger只生成其中一种方法的文档,有时是列表,有时是分页。我怎么能告诉swagger他们是不同的方法,并