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

时间:2015-11-24 08:43:26

标签: java setter

首先,在发布我的问题之前让我告诉大家,即使他们看起来很愚蠢,也要停止低估我的问题,这个网站对我来说是一个重要的地方,它对我很多帮我很多一个问题禁令对我来说将是一个沉重的挫折,所以即使没有回答也要有帮助! 现在提出问题,

我有这个方法,我使用用户输入

为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方法时,它们具有相同的值! 每个对象不应该获得它自己的实例变量副本吗?

1 个答案:

答案 0 :(得分:0)

问题出在您的addName() - 函数中。您输入循环(while (!answer.equals("y") || (!answer.equals("n"))))直到输入yn为止。所以一旦你输入它,你的循环就会停止。

在你的循环中,检查所做的输入是否包含yn。现在问题应该清楚了。您的循环不会与输入的这两个值一起运行,但是在循环内部,您要检查是否输入了其中一个。

两个小的个人提示(每个人都有另一种风格):不要使用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());

  }
}

希望有所帮助!