无法从Java中的单独类调用方法

时间:2016-02-08 06:08:03

标签: java methods

制作一个小型博客应用程序,只需设置保存数据的位置即可。我有3个类,一个用于用户的帖子,一个用于测试,我将其命名为Blog。当我尝试调用getName();它赢得运行的Blog类中的方法一直说它需要一个字符串,但我创建了一个用户对象数组,并为userName点输入一个字符串,它仍然无法正常工作。

    public class Blog
{
    public static void main(String []args)
    {
        User[] userList = new User[3];
        userList[0] = new User("what.com", "TheLegionCrab", "Jake Parham", "jparham@gmail.com");
        userList[1] = new User("huh.com", "RaggleFraggle", "Brett Hawkins", "bhawkins@gmail.com");
        userList[2] = new User("buh.com", "SeanBeast", "Sean Sweeney", "ssweeney@gmail.com");

        for(int counter = 0; counter<userList.length; counter++)
        {
            User.getName();
        }
    }
}

public class User
{
    private String url; 
    private String userName;
    private String realName;
    private String email;

    public User(String url, String userName, String realName, String email)
    {
        this.url = url;
        this.userName = userName;
        this.realName = realName;
        this.email = email;
    } 
    public void getName(String userName)
    {
        System.out.println(userName);
    }
}

6 个答案:

答案 0 :(得分:2)

public void getName(String userName)
{
    System.out.println(userName);
}

这里你的函数需要一个String。这就是为什么它需要字符串来运行。如果要在循环中打印当前User对象的userName,请使用此。

public void getName()
{
    System.out.println(this.userName);
}

这是指循环中的当前User对象。 现在回到你的循环。

    for(int counter = 0; counter<userList.length; counter++)
    {
        User.getName();
    }

您使用User类,同时将变量创建为

User[] userList = new User[3];

要从var中打印,您应该使用var。

    for(int counter = 0; counter<userList.length; counter++)
    {
        userList[counter].getName();
    }

答案 1 :(得分:0)

您需要从status数组访问User实例(或以其他方式获取实例)来调用方法(并将其分配给变量并使用它只打印它)。在Java中,使用userList执行数组访问。像

这样的东西
[]

您还可以使用增强型for循环(for-each loop),例如

for (int counter = 0; counter < userList.length; counter++)
{
    System.out.println(userList[counter].getName());
}

另外,我认为for (User user : userList) { System.out.println(user.getName()); } 不应该是shadowinggetName字段。你想要的东西,

name

遵循Java在getter中返回值的做法(并修复上面的示例)

public void getName()
{
    System.out.println(this.userName);
}

答案 2 :(得分:0)

那是因为您指定User类中的getName方法将String作为参数。你这样做了:

public void getName(String userName)
{
    System.out.println(userName);
}

所以它完全以你告诉它的方式工作。

但实际上,你想要&#34; setName()&#34;取一个String arg和&#34; getName()&#34;不采取任何争议。它应该是这样的:

public void setName(String new_userName)
{
    username = new_userName;
}

public void getName()
{
    System.out.println(userName);
}

但即便如此,我还是说你的方法名称有点含糊不清:我应该使用&#34; getName&#34;获取用户名,或获取realName? (你发现了错误吗?)

答案 3 :(得分:0)

看起来你想要的是将用户实例的名称而不是参数打印到getName方法。尝试这样定义方法:

    public void getName()
    {
        System.out.println(this.userName);
    }

并在主要方法中:

User[] userList = new User[3];
userList[0] = new User("what.com", "TheLegionCrab", "Jake Parham", "jparham@gmail.com");
userList[1] = new User("huh.com", "RaggleFraggle", "Brett Hawkins", "bhawkins@gmail.com");
userList[2] = new User("buh.com", "SeanBeast", "Sean Sweeney", "ssweeney@gmail.com");

for(int counter = 0; counter<userList.length; counter++)
{
     userList[counter].getName();
}

答案 4 :(得分:0)

的问题:

a)调用不带任何对象的getName(),即作为静态函数。而是使用创建的对象并将其命名为:

userList[counter].getName();

b)使用名称(在构造函数中)创建User对象,并使用参数(即userName)调用getName。这是错误的/不需要的。创建对象时,您已经向对象通知了userName。所以有一个干净的吸气剂,没有任何争论。

getName() 

代码:

public class Blog
{
    public static void main(String []args)
    {
        User[] userList = new User[3];
        userList[0] = new User("what.com", "TheLegionCrab", "Jake Parham", "jparham@gmail.com");
        userList[1] = new User("huh.com", "RaggleFraggle", "Brett Hawkins", "bhawkins@gmail.com");
        userList[2] = new User("buh.com", "SeanBeast", "Sean Sweeney", "ssweeney@gmail.com");


        for(int counter = 0; counter<userList.length; counter++)
        {
            userList[counter].getName(); # Correct this to use the created objects.
        }
    }
}

public class User
{
    private String url; 
    private String userName;
    private String realName;
    private String email;

    public User(String url, String userName, String realName, String email)
    {
        this.url = url;
        this.userName = userName;
        this.realName = realName;
        this.email = email;
    } 
    public void getName() #Remove the argument.
    {
        System.out.println(this.userName);
    }
}

答案 5 :(得分:-1)

你必须在调用之前创建User类的对象,否则你的User类应该是静态的,直接调用它。

for(int counter = 0; counter<userList.length; counter++)
    {   User obj = new User();
        obj.getName();
    }

其他

public static User

{

public User(String url, String userName, String realName, String email)
{
    this.url = url;
    this.userName = userName;
    this.realName = realName;
    this.email = email;
} 
public void getName(String userName)
{
    System.out.println(userName);
}

}