gpt4 book ai didi

java - 如何修复使用数组列表对非静态方法进行静态引用的错误

转载 作者:行者123 更新时间:2023-12-02 10:58:54 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Cannot make a static reference to the non-static method

(8 个回答)


4年前关闭。




目前我只是在java中做一些练习:

主要的:

import java.util.ArrayList;
import java.util.Random;
import javax.swing.JOptionPane;
import settelersofcatan.playerinformation;

public class settlersofcatanhelper
{
private ArrayList<playerinformation> PlayerArray = new ArrayList<playerinformation>();
public static void main(String[] args)
{
String NumberOfPlayersString = JOptionPane.showInputDialog("How many player");
int NumberOfPlayers = Integer.parseInt(NumberOfPlayersString);


for (int Counter = 0; Counter < NumberOfPlayers; Counter++)
{
String Name = JOptionPane.showInputDialog("Name of player " + Counter);
String Colour = JOptionPane.showInputDialog("which colour are you playing with");
playerinformation PlayerDetails = new playerinformation(Name, Colour, Counter);
addplayer(PlayerDetails);
}

}

public void addplayer(playerinformation player)
{
this.PlayerArray.add(player);
}
}

助手类:
package settelersofcatan;

public class playerinformation {
String PlayerName;
String Colour;
int Position;

public playerinformation(String name, String colour, int position)
{
setPlayerName(name);
setColour(colour);
setPosition(position);

}

public String getPlayerName() {
return PlayerName;
}
public void setPlayerName(String playerName) {
PlayerName = playerName;
}
public String getColour() {
return Colour;
}
public void setColour(String colour) {
Colour = colour;
}
public int getPosition() {
return Position;
}
public void setPosition(int position) {
Position = position;
}
}

我现在遇到的问题是我正在尝试添加玩家的信息并获得响应“无法从类型setttersofcatanhelper 对非静态方法addplayer(playerinformation) 进行静态引用”。
我查看了我有这个工作的代码,但看不出有什么不同或为什么它不起作用的原因。谁能帮我?

最佳答案

您需要了解“静态”一词的含义。
您可以在这里查看其他地方:
https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html (文档)
https://www.javatpoint.com/static-keyword-in-java (易于阅读的教程)

If you apply static keyword with any method, it is known as static method. A static method belongs to the class rather than object of a class. A static method can be invoked without the need for creating an instance of a class. static method can access static data member and can change the value of it.



因此,您不能从静态(类)方法调用非静态(对象)方法。您需要创建一个对象并在对象引用上调用该方法:
settlersofcatanhelper a = new settlersofcatanhelper();
a.addPlayer(PlayerDetails);

或将方法更改为静态方法,如果这是您想要做的(我不能判断,取决于您要实现的目标),但请记住 this不能从静态内容调用变量(列表本身也必须是静态的)。
private static ArrayList<playerinformation> PlayerArray = new ArrayList<playerinformation>();

[...]

public static void addplayer(playerinformation player) {
this.PlayerArray.add(player);
}

"
另外(不完全关于主题),我建议您阅读有关 java 中的命名约定 :)

编辑:

我尝试掌握它的想法是使用 public static void main(String[] args) 创建一个单独的类(称为“测试”或其他)。方法(仅此而已),然后从那里开始。静态和非静态成员之间的区别在开始时可能会有点困惑,并且为您的“逻辑”单独放置一个位置可能有助于区分您可以使用和不能使用的静态内容。

那么你的 main方法可能类似于:
public static void main(String[] args) {
settlersofcatanhelper object = new settlersofcatanhelper();
// do what you want with your object (which is an instance of settlersofcatanhelper class)
}

关于java - 如何修复使用数组列表对非静态方法进行静态引用的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50257642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com