首先,在发布我的问题之前让我告诉大家,即使他们看起来很愚蠢,也要停止低估我的问题,这个网站对我来说是一个重要的地方,它对我很多帮我很多一个问题禁令对我来说将是一个沉重的挫折,所以即使没有回答也要有帮助! 现在提出问题,
我有这个方法,我使用用户输入
为setter方法赋值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中从对象p1
和对象p2
调用此方法,并为每个实例变量名称分配一个不同的值
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());
}
}
但是当我在main getName()
和p1
结束时调用p2
方法时,它们具有相同的值!
每个对象不应该获得它自己的实例变量副本吗?
答案 0 :(得分:0)
问题出在您的addName()
- 函数中。您输入循环(while (!answer.equals("y") || (!answer.equals("n")))
)直到输入y
或n
为止。所以一旦你输入它,你的循环就会停止。
在你的循环中,检查所做的输入是否包含y
或n
。现在问题应该清楚了。您的循环不会与输入的这两个值一起运行,但是在循环内部,您要检查是否输入了其中一个。
两个小的个人提示(每个人都有另一种风格):不要使用break;
让你的循环结束自己。用布尔变量做它并更新它的状态。
第二个提示是使用一个Scanner
- 对象。例如,您可以在Scanner
- 函数中添加addName
- 参数。只需在MainClass
中初始化一个。
应用于您的代码的问题的提示和修复可能如下所示:
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();
}
}
您的MainClass
:
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());
}
}
希望有所帮助!