我试图从main方法传递一个值并将其设置为私有变量。以下是相关的主要方法:
import java.util.*;
public class Experiment{
private static Extension extension=new Extension();
public static void main(String[] ars);{
Scanner input=new Scanner(System.in);
System.out.print("Enter the length: ");
int length=input.nextInt;
extension.messages(length); }
}
以及它的内容:
public class Extension{
private int theLength;
public void Extension(int length){
theLength=length; }
public void setLength(int length){
theLength=length; }
public int getLength() {
return theLength }
public void messages(int length){
System.out.println("theLength: "+theLength);
System.out.println("Length: "+getLength(); }
}
我添加了额外的显示,因为我想查看值是否正确传递。当我运行它时,我意识到它不是;尽管输入了不同的数字,但长度和长度都设置为零。谁能看到我做错了什么?我真诚地感谢一个彻底的答案(因为我刚刚开始)。
答案 0 :(得分:1)
您没有设置私有变量length
。你应该调用setLength(int length)
方法。
更改为
System.out.print("Enter the length: ");
int length=input.nextInt;
extension.setLength(length); // this will set the private variable
extension.messages(length);
答案 1 :(得分:0)
这是encapsulation的一课。正如@salihrkc所说,你的问题是你实际上从未设置过“扩展”对象中存在的长度变量。如果您尝试将“长度”打印为传入您的对象,您会发现它已经很好了。
您使用点运算符(例如extension.messages(length);
)对您的对象进行操作,以调用messages方法。您应该意识到的关键点是您不能仅通过执行extension.theLength = length;
来设置对象长度。这是因为private修饰符。相反,你应该使用“getter”和“setter”方法。这些函数存在于您的对象中,因此可以访问私有变量,因此您可以执行extension.setLength(length);
和System.out.println(extension.getLength());
查看我链接的两个来源,他们会帮助。
祝你好运。