Can';在Java中,不要从单独的类调用方法

Can';在Java中,不要从单独的类调用方法,java,methods,Java,Methods,制作一个小的迷你博客应用程序,只需设置存放数据的位置。我有3个类,一个用于帖子,一个用于用户,一个用于测试,我将其命名为Blog。当我尝试调用getName()时;方法,它不会运行它一直说它需要一个字符串,但我创建了一个用户对象数组,并为用户名点输入了一个字符串,但它仍然不起作用 public class Blog { public static void main(String []args) { User[] userList = new User[3

制作一个小的迷你博客应用程序,只需设置存放数据的位置。我有3个类,一个用于帖子,一个用于用户,一个用于测试,我将其命名为Blog。当我尝试调用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++)
        {
            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);
    }
}
公共类博客
{
公共静态void main(字符串[]args)
{
用户[]用户列表=新用户[3];
userList[0]=新用户(“what.com”、“TheRegionCrab”、“Jake Parham”、”jparham@gmail.com");
userList[1]=新用户(“huh.com”、“RaggleFraggle”、“Brett Hawkins”bhawkins@gmail.com");
userList[2]=新用户(“buh.com”、“SeanBeast”、“Sean Sweeney”ssweeney@gmail.com");

对于(int counter=0;counter您需要从
userList
数组中访问
User
实例(或者以其他方式获取实例)来调用方法(或者将其分配给变量并使用它,或者只打印它)。在Java中,数组访问是通过
[]
执行的。类似于

for (int counter = 0; counter < userList.length; counter++)
{
    System.out.println(userList[counter].getName());
}
另外,我不认为
getName
应该是class
name
字段

public void getName()
{
    System.out.println(this.userName);
}
遵循在getter中返回值的Java实践(并修复上面的示例)


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

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


}

这是因为您指定User类中的getName方法使用字符串作为参数。您在此处执行了此操作:

public void getName(String userName)
{
    System.out.println(userName);
}
所以它正按照你告诉它的方式工作

但实际上,您希望“setName()”接受字符串arg,而“getName()”不接受任何arg

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

public void getName()
{
    System.out.println(userName);
}
    public void getName()
    {
        System.out.println(this.userName);
    }
但即便如此,我还是要说您的方法名有点模棱两可:我应该使用“getName”来获取用户名,还是使用realName?
(您发现错误了吗?

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

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

public void getName()
{
    System.out.println(userName);
}
    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();
}
User[]userList=新用户[3];
userList[0]=新用户(“what.com”、“TheRegionCrab”、“Jake Parham”、”jparham@gmail.com");
userList[1]=新用户(“huh.com”、“RaggleFraggle”、“Brett Hawkins”bhawkins@gmail.com");
userList[2]=新用户(“buh.com”、“SeanBeast”、“Sean Sweeney”ssweeney@gmail.com");
对于(int counter=0;counter问题:

a) 在没有任何对象的情况下调用getName(),即作为静态函数调用。使用创建的对象并将其称为:

userList[counter].getName();
b) 使用名称(在构造函数中)创建用户对象,并使用参数(即用户名)调用getName。这是错误的/不需要的。创建对象时,您已经将用户名告知了对象。因此,请使用无参数的干净getter

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);
    }
}
公共类博客
{
公共静态void main(字符串[]args)
{
用户[]用户列表=新用户[3];
userList[0]=新用户(“what.com”、“TheRegionCrab”、“Jake Parham”、”jparham@gmail.com");
userList[1]=新用户(“huh.com”、“RaggleFraggle”、“Brett Hawkins”bhawkins@gmail.com");
userList[2]=新用户(“buh.com”、“SeanBeast”、“Sean Sweeney”ssweeney@gmail.com");
对于(int计数器=0;计数器
这里您的函数需要一个字符串。这就是为什么它需要字符串来运行。如果您想在循环中打印当前用户对象的用户名,请使用此选项

public void getName()
{
    System.out.println(this.userName);
}
这是指循环中的当前用户对象。 现在回到你的循环

    for(int counter = 0; counter<userList.length; counter++)
    {
        User.getName();
    }
要从var打印,应使用var

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

for(int counter=0;counter谢谢大家的帮助,努力自学,挫折感正在蔓延哈哈
public void getName()
{
    System.out.println(this.userName);
}
    for(int counter = 0; counter<userList.length; counter++)
    {
        User.getName();
    }
User[] userList = new User[3];
    for(int counter = 0; counter<userList.length; counter++)
    {
        userList[counter].getName();
    }