目前我正在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;
}
}
我现在遇到的问题是我正在尝试添加播放器的信息并获得响应&#34;无法对该类型的非静态方法添加播放器(播放器信息)进行静态引用settlersofcatanhelper&#34 ;. 我已经查看了我有这个工作的代码,但无法看到它为什么不起作用的任何区别或原因。任何人都可以帮助我吗?
答案 0 :(得分:0)
您正在从静态方法(主要方法)调用非静态方法(addplayer)。您可以修复它,只需将 addplayer 设为静态。
答案 1 :(得分:0)
您需要了解“静态”一词的含义。 你可以在这里看看其他地方: https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html(文件) https://www.javatpoint.com/static-keyword-in-java(易于阅读的教程)
如果使用任何方法应用static关键字,则称为静态方法。 静态方法属于类而不是类的对象。 无需创建类的实例即可调用静态方法。 静态方法可以访问静态数据成员,并可以更改它的值。
因此,您无法从静态(类)方法调用非静态(对象)方法。您需要创建一个对象并在对象引用上调用该方法:
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)
}