gpt4 book ai didi

java - 不同的对象,同名变量应该有两个不同的值,但不是吗?

转载 作者:行者123 更新时间:2023-11-29 05:05:33 25 4
gpt4 key购买 nike

目的:获取用户输入的姓名和年龄,并在末尾打印一条消息:

“名字就是年龄。”

NameIsAge.java

public class NameIsAge 
{
static String userName;
static int userAge;
NameIsAge (String userName, int userAge)
{
userName = this.userName;
userAge = this.userAge;

}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
final void run(String[] args)
{
System.out.println(userName + " is " + userAge);
}
}

NameIsAgeLauncher.java

import java.util.Scanner;
public final class NameIsAgeLauncher {
private NameIsAgeLauncher()
{
}
public static void main(String[] args) {
String userName = null;
int userAge = 0;
Scanner stdIn = new Scanner(System.in);
System.out.println("Enter your name: "); //Prompts user to enter name.
NameIsAge.userName = stdIn.nextLine(); //Name from Practice should be equal to what the user enters.
System.out.println("Enter your age: "); //Prompts user to enter name.
NameIsAge.userAge = stdIn.nextInt(); //Name from Practice should be equal to what the user enters.
NameIsAge blah = new NameIsAge(userName, userAge);

NameIsAge halb = new NameIsAge ("Campbell", 97);
halb.setUserName("Campbell");
halb.setUserAge (97);
System.out.println(blah.userName + " is " + blah.userAge + ".");
System.out.println(halb.userName + " is " + halb.userAge + ".");
}
}

这打印了这个:

Enter your name: 
dsf
Enter your age:
32
Blah: Campbell is 97.
Halb: Campbell is 97.

它应该打印这个:

Blah: dsf is 32.
Halb: Campbell is 97.

设置 halb 的值会发生什么变化吗?

最佳答案

这是由静态修饰符引起的。

static String userName;
static int userAge;

删除静态关键字是诀窍
静态修饰符表示它适用于所有实例。
顺便提一句。构造函数不好,应该是:

NameIsAge (String userName, int userAge)
{
this.userName = userName;
this.userAge = userAge;

}

完整代码如下:
辅助变量尽量使用局部变量

import java.util.Scanner;
public final class NameIsAgeLauncher {
private NameIsAgeLauncher()
{
}
public static void main(String[] args) {
String userName = null;
int userAge = 0;
Scanner stdIn = new Scanner(System.in);
System.out.println("Enter your name: "); //Prompts user to enter name.
userName = stdIn.nextLine(); //Name from Practice should be equal to what the user enters.
System.out.println("Enter your age: "); //Prompts user to enter name.
userAge = stdIn.nextInt(); //Name from Practice should be equal to what the user enters.
NameIsAge blah = new NameIsAge(userName, userAge);

NameIsAge halb = new NameIsAge ("Campbell", 97);
halb.setUserName("Campbell");
halb.setUserAge (97);
System.out.println(blah.userName + " is " + blah.userAge + ".");
System.out.println(halb.userName + " is " + halb.userAge + ".");
}
}

.

public class NameIsAge 
{
String userName;
int userAge;
NameIsAge (String userName, int userAge)
{
this.userName = userName;
this.userAge = userAge;

}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
final void run(String[] args)
{
System.out.println(userName + " is " + userAge);
}
}

关于java - 不同的对象,同名变量应该有两个不同的值,但不是吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30514498/

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