2015-12-12 2 views
0

Привет, я нахожусь в моей первой школе компьютерных наук, и для школы мы должны сделать проект java (маленькая игра) с воинами, сражающимися друг с другом. Дело в том, что они, к сожалению, «вынудили» нас использовать конкретные методы.Как заполнить столбцы 2D-массивов из массива 1D

Итак, для «сверхдержавных навыков» каждого воина у нас есть булевая таблица. Мы должны использовать логический массив, чтобы позже узнать, есть ли у какого-то воина определенный superSkill или нет.

Я думал написать метод String, который извлекает значение String для каждого булева элемента, а затем помещает этот метод в столбец 2 моего 2D-массива.

Мой вопрос: что в столбце n ° 2 моего 2D-массива я хотел бы поместить каждое логическое значение из моего массива superSkills в правой строке.

Я попытался установить в столбце 2 свой метод retrieveBoolean, но, как вы можете видеть, он дает мне весь логический массив в [row1 column2, row2, column2 и row 3, column2], который я не хочу, я хочу, чтобы каждый элемент e1, e2 моего булева массива, чтобы соответствовать в row1column1, row2column2 ...

public class SuperSkills { 

private static boolean[] superSkills = { true, false, true }; 

public static String retrieveSkills() { 
    String myS = ""; 

    for (int i = 0; i < superSkills.length; i++) { 
     myS += String.valueOf(superSkills[i]); 
    } 

    return myS; 
} 

public static void main(String[] args) { 
    String[][] myArray = { { "X0", "", "Z1" }, 
      { "X1", "", "Z1" }, 
      { "X2", "", "Z2" } }; 

    for (int i = 0; i < myArray.length; i++) { 
     for (int j = 0; j < myArray.length; j++) { 
      myArray[j][1] = retrieveSkills(); 
     } 
    } 

    System.out.println(Arrays.deepToString(myArray)); 

} 

Я знаю, что есть что-то делать с моей конкатенации моих М.И.С. в моем методе retrieveSkills, но я не знаю, как решить, что вопрос.

ВЫВОД:

[[X0, truefalsetrue, Z1], [X1, truefalsetrue, Z1], [X2, truefalsetrue, Z2]] 

Что я хотел бы я иметь:

[[X0, true, Z1], [X1, false, Z1], [X2, true, Z2]] 

Заранее спасибо за помощь :)

+0

Я не понимаю, что вы хотите достичь. Если что-то является логическим, не представляйте его как строку. Держите его как логическое. Я также не знаю, для чего предназначен 2D-массив. Я бы ожидал увидеть класс 'Warrior', содержащий поле' skills' типа 'boolean []' (поскольку вы, видимо, вынуждены представлять навыки как логический массив) –

+0

'myArray [j] [1] = String.valueOf (superSkills [J]); 'сделает трюк. –

+0

Спасибо за ответы!:) – algorithmic

ответ

1

Просто используйте следующий код:

public static void main(String[] args) { 
    String[][] myArray = { { "X0", "", "Z1" }, 
      { "X1", "", "Z1" }, 
      { "X2", "", "Z2" } }; 

    for (int j = 0; j < myArray.length; j++) { 
      myArray[j][1] = String.valueOf(superSkills[j]); 
    } 

    System.out.println(Arrays.deepToString(myArray)); 
} 

Метод retrieveSkil ls() не требуется, потому что вы хотите сохранить только одно логическое значение из superSkills, «for (int i = 0; i < myArray.length; i ++) «не нужно, потому что вы никогда не используете i и не выполняете какую-либо операцию во всех отношениях этого» для (... ».

1

Проблема в том, что вы генерируете все« булевские строки »в единственная переменная String myS, поэтому мы немного изменим код, и я объясню, почему. Во-первых, по методу superSkills(), мы собираемся заставить метод напрямую вернуть заданное значение, сделав это небольшие изменения:

public static String retrieveSkills(int skillID) { 
    try { 
    return String.valueOf(superSkills[skillID]); 
    } catch (Exception e) { 
    return "NA"; 
    } 
} 

делая это, мы просто нужно отправить skillID или столбец, чтобы получить его в виде строки, обратите внимание, что мы помещаем его в примерки улове только в са se, мы делаем это, когда мы используем массивы в качестве хорошей практики.

Тогда мы просто отправить skillID методу в главном

myArray[j][1] = String.valueOf(superSkills[j]); 
+0

О, ладно, я никогда не думал об использовании try-catch, спасибо за ответ :) – algorithmic

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