Java 实例变量,对于不同的对象具有相同的值,尽管分配了不同的值
首先,在发布我的问题之前,让我请大家停止对我的问题投否决票,即使他们看起来很愚蠢,这个网站对我来说是一个重要的地方,它帮助了我很多关于java的疑问,一个问题禁令对我来说将是一个沉重的挫折,所以即使不回答也会有所帮助! 现在是问题, 我有这个方法,当我用用户输入给setter方法赋值时Java 实例变量,对于不同的对象具有相同的值,尽管分配了不同的值,java,setter,Java,Setter,首先,在发布我的问题之前,让我请大家停止对我的问题投否决票,即使他们看起来很愚蠢,这个网站对我来说是一个重要的地方,它帮助了我很多关于java的疑问,一个问题禁令对我来说将是一个沉重的挫折,所以即使不回答也会有所帮助! 现在是问题, 我有这个方法,当我用用户输入给setter方法赋值时 public void addName() { Scanner input = new Scanner(System.in); System.out.println("Do yo
public void addName() {
Scanner input = new Scanner(System.in);
System.out.println("Do you want to add a citizen name?");
String answer = input.nextLine();
while (!answer.equals("y") || (!answer.equals("n"))) {
if (answer.equals("y")) {
String giveName = input.nextLine();
this.setName(giveName);
break;
} else if (answer.equals("n")) {
System.out.println("Not adding a name!");
break;
}else{System.out.println("Please choose y or n!");
answer = input.nextLine();}
}
}
该方法随后在main中从objectp1
和objectp2
调用,并为每个实例变量名分配一个不同的D值
import java.util.ArrayList;
import java.util.Scanner;
public class MainClass {
public static void main(String[] args) {
ArrayList<Pessoas> lista = new ArrayList<Pessoas>();
Pessoas p1 = new Portugueses();
Pessoas p2 = new Alemaes();
p1.addName();
p2.addName();
System.out.println(p1.getName());
System.out.println(p2.getName());
}
}
import java.util.ArrayList;
导入java.util.Scanner;
公共类主类{
公共静态void main(字符串[]args){
ArrayList lista=新的ArrayList();
Pessoas p1=新葡萄牙();
Pessoas p2=新的Alemaes();
p1.addName();
p2.addName();
System.out.println(p1.getName());
System.out.println(p2.getName());
}
}
但是当我调用main末尾的getName()
方法时,p1
和p2
都有相同的值!
难道每个对象都不应该获得自己的实例变量副本吗?问题出在您的
addName()
-函数中。您运行循环(while(!answer.equals(“y”)|(!answer.equals(“n”))
)直到输入了y
或n
。所以一旦你进入它,你的循环就会停止
在循环中,检查输入是否包含ay
或n
。现在问题应该清楚了。您的循环不会在输入这两个值的情况下运行,但在循环内部,您希望检查是否输入了其中一个值
两个小小的个人提示(每个人都有另一种风格):不要使用break代码>让循环自己结束。使用布尔变量并更新其状态
第二个提示是使用一个扫描器-对象。例如,您可以将扫描仪
-参数添加到addName
-函数中。只需在main类中初始化一个
应用于代码的问题提示和修复可能如下所示:
public void addName(Scanner input) {
System.out.println("Do you want to add a citizen name?");
String answer;
boolean isAnotherInputNeeded = true;
while (isAnotherInputNeeded) {
answer = input.nextLine();
if (answer.equals("y"))
{
System.out.println("What's the name?");
String giveName = input.nextLine();
this.setName(giveName);
isAnotherInputNeeded= false;
}
else if (answer.equals("n"))
{
System.out.println("Not adding a name!");
this.setName("No name entered");
isAnotherInputNeeded= false;;
}
else
{
System.out.println("Please choose y or n!");
}
input.reset();
}
}
以及您的main类
:
import java.util.ArrayList;
import java.util.Scanner;
public class MainClass {
public static void main(String[] args) {
ArrayList<Pessoas> lista = new ArrayList<Pessoas>();
Pessoas p1 = new Pessoas();
Pessoas p2 = new Pessoas();
Scanner input = new Scanner(System.in);
p1.addName(input);
p2.addName(input);
System.out.println("You entered the following names:");
System.out.println(p1.getName());
System.out.println(p2.getName());
}
}
import java.util.ArrayList;
导入java.util.Scanner;
公共类主类{
公共静态void main(字符串[]args){
ArrayList lista=新的ArrayList();
Pessoas p1=新的Pessoas();
Pessoas p2=新的Pessoas();
扫描仪输入=新扫描仪(System.in);
p1.地址名(输入);
p2.地址名(输入);
System.out.println(“您输入了以下名称:”);
System.out.println(p1.getName());
System.out.println(p2.getName());
}
}
希望有帮助 也许您将name变量声明为static。您没有发布相关代码Pessoas
class.你的getName是什么样子的?setName()也是相关的是的,你的权利我昨天在试验静态方法和变量,忘记在声明名称之前删除静态表达式!感谢Mant我的while循环的要点是在输入y或n之前重复“请选择y或n”这句话,此时与输入的答案相对应的代码将运行,然后跳出循环。它在这里工作得非常好。老实说,我不明白你为什么说问题很清楚?