我在一个简单的课上有一个小问题。
import java.util.Random;
public class fileTest {
private static Random rand = new Random();;
private int randOne = rand.nextInt(10);
private String strOne = String.format("%02d", this.randOne);
public int getRandOne() {
return randOne;
}
public void setRandOne(int randOne) {
this.randOne = randOne +1;
}
public String getStrOne() {
return strOne;
}
}
我的“发射器”
public class launch {
public static void main(String[] args) {
fileTest fileA = new fileTest();
System.out.println(fileA.getStrOne());
//FunctionDoMyStuff...
fileA.setRandOne(fileA.getRandOne());
System.out.println(fileA.getRandOne());
//RandOne is increment
System.out.println(fileA.getStrOne());
//StrOne is not
}
}
我的想法是创建一个随机数并将其转换为字符串。 完成我的工作之后,我需要增加字符串。
但是,setter之后的结果与开始时相同。我想我不了解有关吸气剂/吸气剂的所有知识。
有人可以帮助我理解我的错误吗?
答案 0 :(得分:4)
这种情况在创建实例时发生一次:
private String strOne = String.format("%02d", this.randOne);
更改randOne
后,它不会自动再次运行。解决方案是完全删除strOne
字段并在getter中构造String:
public String getStrOne() {
return String.format("%02d", this.randOne);
}
您不需要存储动态派生的值。
您的方法setRandOne
的行为与人们可能合理预期的set
方法的行为不匹配。一种可以完成您的工作的方法可以描述为setRandOneToOneHigherThan(int value)
。或者,您可以将其称为incrementRandOne()
,但是身体需要做this.randOne = this.randOne + 1;
(或this.randOne++;
)。或者,您可以将其设为普通的设置器并在调用方法fileA.setRandOne(fileA.getRandOne() + 1);
时进行递增。