我正在处理有任务的项目,所有任务数据都保存在播放器文件中。我在播放器文件中保存任务数据的方法不是一种方法,而是一个简单的整数字符串。
我在User.java中做了什么:
private final int[][] questData = {{0}, {0}, {0}, {0}, {0}};
以上代码可以保存所有5个任务的进度。
在我的QuestHandling.java中,我编写了代码:
public static void checkQuestStates(User user) {
if (user.questProgress[1][1] == 0) {
System.out.println("Quest One Status = 0");
}
}
这是一个测试,看看我是否可以获得字符串中第一个int的值(User.java)。 这导致了我的问题,如何获得字符串中的每个int的值&处理它,所以我可以做类似的事情:
if (user.questProgress[1] == 0) {
user.getPackets().sendConfig(29, 0); //(makes that quest (Quest #1) icon red a.k.a not started)
}else if (user.questProgress[1] >= 1 && user.questProgress[1] != 10) {
user.getPackets().sendConfig(29, 1); //(makes that quest (Quest #1) icon yellow a.k.a started
} else if (user.questProgress[1] == 10) {
user.getPackets().sendConfig(29, 2); //(makes that quest (Quest #1) icon green a.k.a finished
}
我改变的事情&我的错误:
我改变了什么: 在Player.java(User.java)中public int[] questProgress = {0, 0, 0, 0, 0};
我也尝试过:
public int questProgress[] = {0, 0, 0, 0, 0};
在questHandler.java中的我放了:
public static void checkQuestStates(Player player) {
if (player.questProgress[1] == 1) {
System.out.println("Quest One Status = 0");
}
}
&安培;我的测试命令是
case "statustest":
StartQuestManager.checkQuestStates(player);
return true;
当我输入命令(只是这个命令)时,我收到以下错误:
ERROR! THREAD NAME: New I/O worker #1
java.lang.NullPointerException
at com.feather.game.player.quests.StartQuestManager.checkQuestStates(StartQuestManager.java:115)
at com.feather.game.player.content.Commands.processAdminCommand(Commands.java:1239)
at com.feather.game.player.content.Commands.processCommand(Commands.java:79)
at com.feather.net.decoders.WorldPacketsDecoder.processPackets(WorldPacketsDecoder.java:1662)
at com.feather.net.decoders.WorldPacketsDecoder.decode(WorldPacketsDecoder.java:279)
at com.feather.net.ServerChannelHandler.messageReceived(ServerChannelHandler.java:98)
at org.jboss.netty.channel.SimpleChannelHandler.handleUpstream(SimpleChannelHandler.java:95)
at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:563)
at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:558)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255)
at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:91)
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.processSelectedKeys(AbstractNioWorker.java:373)
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:247)
at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:35)
at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:102)
at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
答案 0 :(得分:1)
正如人们已经说过的那样,你可能不希望questData
成为最终版,因为你将在以后更改它。
另外,请记住数组是零索引的,所以
public static void checkQuestStates(User user) {
if (user.questProgress[1][1] == 0) {
System.out.println("Quest One Status = 0");
}
}
应该是:
public static void checkQuestStates(User user) {
if (user.questProgress[0][0] == 0) {
System.out.println("Quest One Status = 0");
}
}
我不完全确定为什么你有一个数组数组,当第二个维数组的长度只有1 ....那么一个常规的int数组会对你更好吗?这样,你可以简单地做到:
if (user.questData[0] == 0) {
user.getPackets().sendConfig(29, 0); //(makes that quest (Quest #1) icon red a.k.a not started)
} else if (user.questData[0] >= 1 && user.questData[0] != 10) {
user.getPackets().sendConfig(29, 1); //(makes that quest (Quest #1) icon yellow a.k.a started
} else if (user.questData[0] == 10) {
user.getPackets().sendConfig(29, 2); //(makes that quest (Quest #1) icon green a.k.a finished
}
如果我错误地阅读了您的问题,请您澄清一下(因为我没有看到任何String[][]
个问题)?
答案 1 :(得分:1)
编辑:好的,你已经放弃了2d阵列。让我们再次这样做
private int[] questData = {0,0,0,0,0,0};
让这个方法更有用,更通用。让我们返回一个字符串。 (你现在似乎不知道如何使用返回,因为你已经为所有方法使用了void)
public String checkQuestStates(User user, int questLine) {
String sQuestData = "Quest 1 Status: "+Integer.toString(user.questProgress[questLine]);
System.out.println(sQuestData);
return sQuestData
}