java - 为什么这会一直输出 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
解决方案
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;
推荐阅读
- python - 在 Amazon Redshift 中创建 Python 2.7 UDF 以在 Postgres 上执行
- leaflet - 在 Wikidata 查询服务中排序地图图例项
- php - 如何删除 .htaccess 中的 Google Adwords gclid 查询字符串?
- javascript - 如何从另一个上层目录快速提供静态文件?
- c++ - C++ - thread_local 向量导致 MinGW 上的 join() 崩溃
- android - “android.view.View 已弃用” - 还有什么要使用或如何修复?
- c++ - C ++:(不重复)积分静态成员初始化(不只是声明!)在类中导致链接器错误,为什么?
- django - 使用modelform时视图不显示
- dialogflow-es - 如何使用他们的 REST API 在 DialogFlow 上创建机器人?
- python - SOAP 操作名称:使用 Zeep 导入