gpt4 book ai didi

java - 再次调用方法时从方法覆盖传递的变量值 - Java

转载 作者:行者123 更新时间:2023-11-30 10:37:47 25 4
gpt4 key购买 nike

我是一名学生,目前正在学习 Java。据我所知,java 从上到下读取代码,但我的程序行为让我感到困惑。这不是我的完整程序,我创建了一个更简单的程序来强调我不理解的部分。

我有两个项目:

Problem.java - 我的主要项目。

Procedures.java - 包含许多 public void 方法,我创建它只是为了重用一组代码。示例:GetAllDigits() - 这是获取字符串的每个数字/字符并存储在 ArrayList 中。

如您所见,在我将变量 account 传递给 GeAllDigits() 后,我立即将值解析为字符串 AllDigits(这是为了保存第一个结果。我这样做是因为我知道我将再次调用该方法并将得到另一个结果)。然后我将第二个结果存储在变量 ThreeDigits 中。

所以我的预期输出应该是:

所有数字:[2, 0, 1, 0, 0, 5]

三位数:[2, 0, 1]

但我得到的是:

所有数字:[2, 0, 1]

三位数:[2, 0, 1]

String account = "201005";
ArrayList<String> AllDigits = new ArrayList<>();
ArrayList<String> ThreeDigits = new ArrayList<>();
String num = new String();

Public Problem()
{ int length = account.length();
Procedures proc = new Procedures();
proc.GetAllDigits(account);
AllDigits = proc.digits;

for(int x=0;x < (length-3);x++)
{
num += AllDigits.get(x);
}
proc.GetAllDigits(num);
ThreeDigits = proc.digits;

System.out.println("All Digits: " + AllDigits.toString());
System.out.println("Three Digits: " + ThreeDigits.toString());
}

public static void main(String[] args) {
new Problem();
}

这是 Procedures.java 的样子:

public ArryList<String> digits = new ArrayList<>();

public void OddEvenDigits(String number)
{...
}

public void GetAllDigits(String acc){
digits.clear();
for(int i =0; i < acc.length(); i++)
{
int j = Character.digit(acc.charAt(i), 10);
digits.add(Integer.toString(j));
}
}

很抱歉我就这么一个简单的问题发了这么长的帖子。任何答案将不胜感激,如果有任何网站/书籍可以推荐给我学习,那就太棒了!

最佳答案

您将获得
All Digits: [2, 0, 1]
Three Digits: [2, 0, 1]
因为你调用GetAllDigits来自同一个proc目的。
在 java 中一个对象可以有多个引用 所以每次你调用 GetAllDigits来自同一个proc对象此更改反射(reflect)在所有引用中,这就是为什么 AlldigitsThreedigits相同
要获得所需的值调用GetAllDigits来自一个新的proc对象。

关于java - 再次调用方法时从方法覆盖传递的变量值 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40012539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com