我想要一些关于我作为示例编写的代码的帮助。我目前正在使用Atom记事本编写代码。
问题说明:
获取"平面详细信息"的用户输入。
预期输出:
打印用户输入的数据。
问题:
我可以成功地接受用户的输入,但在打印时,所有值都显示为NULL
。
代码:
import java.util.*;
class Planes{
String Name;
int Number_of_Pylons;
String Type;
void EnterValues()
{
Scanner s=new Scanner(System.in);
System.out.println("NAME: ");
String Name=s.nextLine();
System.out.println("PYLONS: ");
int Number_of_Pylons=s.nextInt();
s.nextLine();
System.out.print("TYPE OF CRAFT: ");
String Type=s.nextLine();
}
};
class Base{
public static void main(String args[]){
Planes air[]=new Planes[2];//DID NOT CREATE OBJECTS, REFERENCE ARRAY!!!!!!!!!
for(int j=0;j<2;j++){
air[j]=new Planes();
}// CREATED OBJECTS OF CLASS PLANE!!!!!!!!!
int i=0;
for(i=0;i<2;i++)
{
System.out.println("Enter values for the planes:");
air[i].EnterValues();
}
System.out.println(air[0].Name);//Test for Print, prints NULL idk why :(
for(i=0;i<2;i++)//Display the Entered Details
{
System.out.println("Name: "+air[i].Name+"Number of Pylons: "+air[i].Number_of_Pylons+"Type: "+air[i].Type);
}
}
};
这是一个相当简单的代码,但我似乎无法使它发挥作用。我也为我的英语道歉。这不是我的第一语言。
这是一个经典的作用域问题。我认为您在Java中还没有很好地学习范围概念。
class Planes{
String Name; //instance variable
int Number_of_Pylons;//instance variable
String Type;//instance variable
void EnterValues()
{
Scanner s=new Scanner(System.in);
System.out.println("NAME: ");
String Name=s.nextLine(); //local variable
System.out.println("PYLONS: ");
int Number_of_Pylons=s.nextInt(); //local variable
s.nextLine();
System.out.print("TYPE OF CRAFT: ");
String Type=s.nextLine(); //local variable
}
};
我已经对上面的代码发表了关于您使用的变量类型的评论。所以,如果你写一些类似的东西
String Name=s.nextLine();
它只是将值分配给局部变量Name
,其作用域仅在函数内部。这不会为对象指定任何内容。如果你想给对象属性赋值,它必须像一样完成
this.Name=s.nextLine();
当您指定此this
时,作用域为实例级别。现在,对象属性Name
具有该值。其他人也是如此。你可以修复剩余的并使其工作。
BTW,使用的命名约定,代码格式等,感觉就像.Net
模型。熟悉java编码的最佳实践,因为这里已经完全崩溃了!。
您确实向用户询问了值,但没有将这些值设置为当前对象
void EnterValues(){
Scanner s = new Scanner(System.in);
System.out.println("NAME: ");
this.name = s.nextLine(); // assign the value to the object's name
System.out.println("PYLONS: ");
this.number_of_Pylons=s.nextInt();
s.nextLine();
System.out.print("TYPE OF CRAFT: ");
this.type=s.nextLine();
}
此外,Java约定较低。变量名的AmelCase