2014-01-29 5 views
0

Я работаю над проектом, имеющим квест, все данные квеста сохраняются в файлах проигрывателя. Мой метод сохранения данных квеста в файле плеера - это не просто метод, а простая строка int.Строки [] [] получение значения int

Что я сделал в 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"); 
     } 
    } 

Это был тест, чтобы увидеть, если я мог бы получить значение первого междунар в строке (User.java). Что приводит к моему вопросу, как я могу получить значение каждого ИНТ в процессе строки & так что я могу сделать что-то вроде:

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) 
+1

questData, вероятно, не должен быть окончательным. – BitNinja

+4

Нет места '1,1', в первую очередь! Посмотрите, как вы инициализируете массив. – Vallentin

+0

@codeNinja да, я думал то же самое, другой член на другом сайте пытался помочь и сказал мне сделать это окончательным и просто дал мне ошибки. – Ryan

ответ

1

EDIT: хорошо, что вы сбросили 2-мерный массив. сделайте это снова

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 
    } 
+0

Невозможно вызвать toString() на примитивном типе int. и как бы я собирал int, чтобы позже я мог получить параметр «int questId» и выполнить бит кода, который отправляет конфигурацию 29 выше? – Ryan

+1

кричит забыл. Integer.toString (I); (где i - переменная int) – Mike

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 .... будет ли регулярный массив ints работать лучше для вас? Таким образом, вы можете просто сделать:

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[][] вопрос)?

+0

Предполагается, что, поскольку он expec чтобы сохранить состояние игры. Если он его инициализирует таким образом, он должен измениться в какой-то момент позже, иначе нет никакой функции, поскольку она всегда будет равна 0. – Chris

+0

Вы прочитали мое сообщение? Цель состоит в том, чтобы помочь ему устранить ошибки ... почему я не помогу ему пройти мимо вопроса, который он задал? Особенно, когда вопрос, который он задал, был недостаточно тщательным, чтобы получить ответ. Я просто пытаюсь помочь – Chris

+0

@ Vallentin, мне нужно будет изменить значение ints (questProgress). Крис. Я займусь этим и попробую. Моя реальная цель заключается в том, чтобы просто сохранить прогресс каждого квеста, который я могу позже прочитать, и увидеть прогресс каждого квеста, определяющий визуальный прогресс на интерфейсе для каждого игрока (сделанный конфигурациями). – Ryan

Смежные вопросы