Почему это продолжает выводить ноль и не работает должным образом? - PullRequest
0 голосов
/ 07 октября 2018

Контекст: я пытаюсь создать «Попугай», для которого вы устанавливаете возраст, имя и две фразы.

После того, как вы дадите имя попугаю, он спросит васкакую фразу вы хотите научить его, а затем она спросит вас следующую фразу после этой.

Когда рождается попугай, ему дается имя и он знает одну фразу: «AWK! Меня зовут».Поскольку возраст нового попугая равен 0, а остальные 2 строки пусты


Мой код следующий: класс Parrot и ParrotRunner

Parrot

 import java.util.*;
 import java.util.Scanner;
 public class Parrot {

  private int age; 
  private String nameS;
  private String nameA;
  private String nameF = nameS + nameA;
  private String phrase2, phrase3;

    public Parrot(){
      age = 0;
      nameA = "Steve";
     phrase2 = "";
      phrase3 = "";

    }
    public Parrot(String na, int a , String p2, String p3){
       na = nameA;
       a = age;
       p2 = phrase2;
       p3 = phrase3;
    }
    public void setPhrase2(String p2){
       p2 = phrase2;
    }
    public void setPhrase3(String p3){
       p3 = phrase3;
    }
    public void setName(String na){
        na = nameA;
    }
    public void presetPhrases(String nf, String ns){
        nameF = nf;
        nameS = ns;
    }  
    public void setAge(int a){
       a = age;
    }
    public String getName(){
      return nameA;
    }
    public int getAge(){
      return age;
   }

    public String getPhrase2(){
      return phrase2;
    }
    public String getPhrase3(){
      return phrase3;
    }
    public String getNameS(){
    return "AWWWWWK! My name is ";
    }
    public String getNameF(){
        return getNameS() + getName();
    }

    public String toStringIntroduction(){
      return "AWWWWK! I'm " + getAge() + getNameF() + ". What do you wish me to say?";
    }
    public String toString2(){
      return getPhrase2() +"! What's the other phrase?";

    }
    public String toString3(){
      return getPhrase3();
    }
}

ParrotRunner

import java.util.*;
import java.util.Scanner;

public class ParrotRunner {
    public static void main(String[] args)
    {
      Parrot basic = new Parrot();

      Scanner input = new Scanner(System.in);
        int a; String p2, p3, na;

        System.out.println("Provide a name");
            na = input.nextLine();

        System.out.println("Enter the age: ");
             a = input.nextInt();

        p2 = input.nextLine();
        p3 = input.nextLine();
      Parrot parameters = new Parrot( na,  a,  p2,  p3);
      System.out.println(parameters.toStringIntroduction());
      p2 = input.nextLine();
      System.out.println(parameters.toString2());
      p3 = input.nextLine();
      System.out.println(parameters.toString3());

    }

}

Код, о котором идет речь, опережает этот неправильный вывод, который приведен ниже, и я не смог отладить его после нескольких часов проверки и изменения моего кода

ParrotRunner.main({ });
    Provide a name
        Name
    Enter the age: 
        1

    AWWWWK! I'm 0AWWWWWK! My name is null. What do you wish me to say?
        Hi
    null! What's the other phrase?
        Hi
    null

Я был бы очень признателен, если бы вы все помогли, и, пожалуйста, объясните ноль

1 Ответ

0 голосов
/ 07 октября 2018
public Parrot(String na, int a , String p2, String p3){
    na = nameA;
    a = age;
    p2 = phrase2;
    p3 = phrase3;
}

должно быть наоборот:

public Parrot(String na, int a, String p2, String p3){
    nameA = na;
    age = a;
    phrase2 = p2;
    phrase3 = p3;
}

Вы не хотите переопределять значения аргументов, вы хотите использовать их для установки полей.Обязательно исправьте также и сеттеры.

Если вы находите это непонятным, используйте this перед именем поля - оно всегда должно появляться в левой части назначения:

this.nameA = na;
...