首页 > 解决方案 > 为什么这会一直输出 null 并且无法正常工作?

问题描述

上下文:我正在尝试创建您设置年龄、名称和两个短语的“鹦鹉”。

在你给鹦鹉起名字后,它会问你想教他什么短语,然后它会问你那个短语之后的下一个短语。

当鹦鹉出生时,它被赋予了一个名字并且知道一个短语:“AWK!我的名字是”。由于它是一个新的鹦鹉年龄为 0,其他 2 个字符串为空


我的代码如下,带有 Parrot 类和 ParrotRunner

鹦鹉

 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

如果大家能提供帮助,我将不胜感激,并请解释 null

标签: javaconstructorjava.util.scanner

解决方案


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;

推荐阅读