java中的引用变量未更改其状态
我有以下代码:java中的引用变量未更改其状态,java,Java,我有以下代码: class Cat { String name; float time; void action(){ if (time >= 0 && time < 8) { System.out.println("I am sleeping"); } else if (time >= 8 && time < 12) { System
class Cat {
String name;
float time;
void action(){
if (time >= 0 && time < 8) {
System.out.println("I am sleeping");
} else if (time >= 8 && time < 12) {
System.out.println("I am playing");
} else if (time >= 12 && time < 19) {
System.out.println("I am sleeping");
} else if (time >= 19 && time <= 24) {
System.out.println("I am playing");
} else {
System.out.println("Wrong input");
}
}
}
public class Main {
public static void main(String[] args) {
Cat cat1 = new Cat();
Cat cat2 = new Cat();
cat1.name = "kali";
cat2.name = "lali";
Cat time1 = new Cat();
Cat time2 = new Cat();
Cat time3 = new Cat();
Cat time4 = new Cat();
time1.time = 3;
cat1.action();
time2.time = 9;
cat1.action();
time3.time = 15;
cat2.action();
time4.time = 21;
cat2.action();
}
}
但是,我得到以下输出:
I am sleeping
I am playing
I am sleeping
I am playing
I am sleeping
I am sleeping
I am sleeping
I am sleeping
为什么会这样
据我所知,变量的状态
time
在这里是常量,不会随着新的输入而改变。您必须这样做:
Cat cat1 = new Cat();
Cat cat2 = new Cat();
cat1.name = "kali";
cat2.name = "lali";
cat1.time = 9;
cat1.action();
cat1.time = 15;
cat1.action();
cat2.time = 9;
cat2.action();
cat2.time = 15;
cat2.action();
因为您有6个不同的对象,并且您正在更改时间对象
time1、time2、time3、time4
。cat1对象未连接到time1、time2、time3、time4
,这是因为您在不同实例上执行操作(例如cat1而不是time1)。因为这些都是实例变量,所以它们只在该实例上起作用
以下内容将解决您的问题:
time1.time = 3;
time1.action(); // instead of cat1
time2.time = 9;
time2.action(); // instead of cat2
// ...
期望的输出是可能的 分别调用实例变量
time1、time2、time3、time4的action方法,而不是cat1
或
通过使<代码>浮动时间代码>作为<代码>静态浮动时间的静态/类变量代码>。这样,time
的值将由Cat的所有实例共享
以下是第二个选项的更新代码
class Cat {
String name;
static float time;
void action() {
if (time >= 0 && time < 8) {
System.out.println("I am sleeping");
} else if (time >= 8 && time < 12) {
System.out.println("I am playing");
} else if (time >= 12 && time < 19) {
System.out.println("I am sleeping");
} else if (time >= 19 && time <= 24) {
System.out.println("I am playing");
} else {
System.out.println("Wrong input");
}
}
}
public class Main {
public static void main(final String[] args) {
final Cat cat1 = new Cat();
final Cat cat2 = new Cat();
cat1.name = "kali";
cat2.name = "lali";
Cat.time = 3;
cat1.action();
Cat.time = 9;
cat1.action();
Cat.time = 15;
cat2.action();
Cat.time = 21;
cat2.action();
}
}
类Cat{
字符串名;
静态浮动时间;
无效行动(){
如果(时间>=0&&time<8){
System.out.println(“我在睡觉”);
}否则如果(时间>=8&&time<12){
System.out.println(“我正在玩”);
}否则如果(时间>=12&&time<19){
System.out.println(“我在睡觉”);
}否则,如果(time>=19&&time)您更新的时间变量与cat1和cat2变量无关,则可以更新cat1.time
,而不是time1.time
?(等)非常感谢,这是我正在寻找的答案,我知道其他答案会给我正确的结果。无法理解第二种方法,请编辑您的答案和详细答案