跨类传递对象

时间:2014-10-12 13:44:43

标签: java object methods

来自极其简单的高中java学生的极其简单的问题。

我收集了用户输入并创建了一个对象" AccountOne"。我必须将AccountOne传递给类printcode并使用printaccount方法打印" myaccount.name,myaccount.address,myaccount.type,myaccount.balance"。我的老师一直试图解释遗产,她每天都在失去我越来越多。根据我的理解,AccountOne类型的对象myaccount现在应该"有" myaccount.name,myaccount.address,myaccount.type,myaccount.balance"在其内部。因为我将对象传递给方法,所以该方法继承了对象中的任何内容。问题,方法printaccount应该能够找到符号" myaccount,my account.name,myaccount.address,myaccount.type,myaccount.balance"。我已经研究过,一切对我来说都没有意义,这似乎都是关于我尚未开始掌握的更先进的东西。如果有重复的问题,请指出。

编译时,我会得到10个以上的错误"不是声明"或"找不到符号myaccount"。在这一点上,我只是采取零,我超越沮丧。我一直瞥了一眼,这很可能是一件非常简单的事。

我已尝试在main语句之前定义printcode中的变量。 AccountOne中定义的变量。试图研究定义方法的不同方法,并且找不到对我有意义的任何方法。



import java.util.Scanner;
public class AccountOne
{
	public String name;
	public String address;
	public String type;
	public double balance;
	
  public static void main(String args[])
  {
		Scanner keyboard = new Scanner(System.in);

		System.out.print("Enter Name ");
		String name=keyboard.nextLine();
		System.out.println();

		System.out.print("Enter Address ");
		String address=keyboard.nextLine();
		System.out.println();

		System.out.print("Enter type ");
		String type=keyboard.nextLine();
		System.out.println();

		System.out.print("Enter Balance ");
		double balance=keyboard.nextDouble();
		System.out.println();

		AccountOne myaccount=new AccountOne();
		 myaccount.name=name;
		 myaccount.address=address;
		 myaccount.type=type;
		 myaccount.balance=balance;

		printcode.printaccount(myaccount);
	}
}




第二类 - 打印代码:

public class printcode
{
    public static void main(String args[])
    {
      public static printaccount(AccountOne myaccount)
        {
            System.out.println("My Account = " + myaccount.name + " " + myaccount.address + " " + myaccount.type + " $" + myaccount.balance);
        }   
    }

}

2 个答案:

答案 0 :(得分:1)

首先,当我们说 - myaccount.name时,它意味着myaccountMyAccount类的一个实例,并且它定义了一个成员变量,它是name

例如 -

class MyAccount {
    String name;
    public static void main (String...a) {
        //here am allowed to say myaccount.name
        MyAccount myaccount = new MyAccount();
    }
}

其次,声明

System.out.println("My Account = " + myaccount.name " " + myaccount.address " " + myaccount.type " $" + myaccount.balance);

完全错了。将其修改为

System.out.println("My Account = " + myaccount.name + " " + myaccount.address + " " + myaccount.type + " \\$" + myaccount.balance);

现在,你应该得到另一个应该告诉你non-static variable address cannot be referenced from a static context的例外。这意味着如果您想在name的上下文中访问main,这是静态的 - 您需要将name的声明更改为

static String name;

第三,我们文件中只能有一个public类。将public class printcode更改为class printcode。如果两个类都在不同的文件中,则无需考虑这一点。

希望这会有所帮助。我将这两个类复制粘贴到一个文件中。

答案 1 :(得分:0)

你已经在main方法中定义了静态方法printaccount(在printcode类中)。从main方法中删除它并且应该可以工作。

除此之外,还有以下几项更改

  1. 您缺少名称/地址等字段(虽然我不建议使用公共字段而是使用get / set方法)
  2. 您的System.out.println出现错误,其中为串联字符串" +"失踪了。

    import java.util.Scanner;
    public class AccountOne
    {
    public String name;
    public String address;
    public String type;
    public double balance;
    public static void main(String args[])
    {
       Scanner keyboard = new Scanner(System.in);
    
       System.out.print("Enter Name ");
       String name=keyboard.nextLine();
       System.out.println();
    
       System.out.print("Enter Address ");
       String address=keyboard.nextLine();
       System.out.println();
    
       System.out.print("Enter type ");
       String type=keyboard.nextLine();
       System.out.println();
    
       System.out.print("Enter Balance ");
       double balance=keyboard.nextDouble();
       System.out.println();
    
       AccountOne myaccount=new AccountOne();
        myaccount.name=name;
        myaccount.address=address;
        myaccount.type=type;
        myaccount.balance=balance;
    
    printcode.printaccount(myaccount);
    }
    }
    
    public class printcode
    {
    
        public static void printaccount(AccountOne myaccount)
        {
            System.out.println("My Account = " + myaccount.name + " " + myaccount.address +  " " + myaccount.type + " $" + myaccount.balance);
        }   
    
    }