Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实例变量,对于不同的对象具有相同的值,尽管分配了不同的值_Java_Setter - Fatal编程技术网

Java 实例变量,对于不同的对象具有相同的值,尽管分配了不同的值

Java 实例变量,对于不同的对象具有相同的值,尽管分配了不同的值,java,setter,Java,Setter,首先,在发布我的问题之前,让我请大家停止对我的问题投否决票,即使他们看起来很愚蠢,这个网站对我来说是一个重要的地方,它帮助了我很多关于java的疑问,一个问题禁令对我来说将是一个沉重的挫折,所以即使不回答也会有所帮助! 现在是问题, 我有这个方法,当我用用户输入给setter方法赋值时 public void addName() { Scanner input = new Scanner(System.in); System.out.println("Do yo

首先,在发布我的问题之前,让我请大家停止对我的问题投否决票,即使他们看起来很愚蠢,这个网站对我来说是一个重要的地方,它帮助了我很多关于java的疑问,一个问题禁令对我来说将是一个沉重的挫折,所以即使不回答也会有所帮助! 现在是问题,

我有这个方法,当我用用户输入给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中从object
p1
和object
p2
调用,并为每个实例变量名分配一个不同的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
。所以一旦你进入它,你的循环就会停止

在循环中,检查输入是否包含a
y
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”这句话,此时与输入的答案相对应的代码将运行,然后跳出循环。它在这里工作得非常好。老实说,我不明白你为什么说问题很清楚?