字符串[] []获取int的值

时间:2014-01-29 20:33:40

标签: java

我正在处理有任务的项目,所有任务数据都保存在播放器文件中。我在播放器文件中保存任务数据的方法不是一种方法,而是一个简单的整数字符串。

我在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)

2 个答案:

答案 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
    }