Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Джава-программеры , помогите!

Степан Палютин Ученик (130), на голосовании 1 месяц назад
Я пишу свою текстовую игру на джава (по типу Resident Evil) и начал писать логику про инвентарь.

Столкнулся с моментом , в котором надо прописать логику :

Когда класс Inventory будет вызываться , то будут выводиться 2 массива (один с названиями орудий и огнестрела, а другой с кол-вом их боезапаса или их отсутствие) в методе toString() естественно.

Я пытаюсь сделать это из 2-ух циклов-for и поместить результаты в строку. Но так как изменения будут виднеться только в цикле джава не может вывести это(как я понял)

Я даже через лямбда выражения попробовал зачем-то , но и это без толку. Помогите вы уж мне пожалуйста ВЕЛИКИЕ джава програмеры!

//Ну рил плиииз

Вот код:

package inventory;

import inventory.TestHelpErrorInterface;

public class Inventory {

public Inventory() {
items[0] = null;
items_values[0] = 0;
}

static String[] items = new String[31];
static int[] items_values = new int[31];

// ↓ на этот метод не смотрите , он не доделан
public static void addIn(String a , int b) {

System.out.println("You've got a new thing in inventory");
}

public String toString() {
TestHelpErrorInterface<String> THEI = () -> {
String it;
for (int i=1;i<items.length;i++) {
for (int j=1;j<items_values.length;i++) {
it = i + items[i] + " " + items_values[j];
}
}
return it;
};
return THEI.toString();
}
}
Голосование за лучший ответ
❤️Ирина immatshast Шастун❤️ Знаток (365) 2 месяца назад
Не поняла проблему. Ну так и выводи каждый раз it. Или у тебя проблема, что String immutable? Ну тогда используй StringBuilder. Или же StringBuffer (если нужна безопасность потоков)
Степан ПалютинУченик (130) 2 месяца назад
Неа , у меня ошибка вылетает: The local variable "it" may not have been initialized
❤️Ирина immatshast Шастун❤️ Знаток (365) Степан Палютин, ты присваиваешь значение переменной it в цикле раз за разом, но эти значения стираются при каждой итерации и никуда не идут. THEI никак не воздействуется переменной it, например
Касманафт Мыслитель (6846) 2 месяца назад
Давайте разберем ваш код и исправим ошибки:

```java
public String toString() {
TestHelpErrorInterface<String> THEI = () -> {
String it = ""; // Инициализация для избежания ошибки
for (int i = 0; i < items.length; i++) { // Начинаем с 0
for (int j = 0; j < items_values.length; j++) { // Исправлено j++
it += i + items[i] + " " + items_values[j] + "\n";
}
}
return it;
};
return THEI.get(); // Предполагается, что интерфейс имеет метод get()
}
```

**Исправления и пояснения:**

1. **Ошибка в цикле**
Было: `for (int j=1; j<items_values.length; i++)`
Исправлено: `for (int j=0; j<items_values.length; j++)`
*Пояснение:* Индекс `j` должен инкрементироваться, а не `i`. Также индексация массивов в Java начинается с 0.

2. **Инициализация переменной**
Было: `String it;`
Исправлено: `String it = "";`
*Пояснение:* Переменная должна быть инициализирована перед использованием.

3. **Работа с интерфейсом**
Предполагается, что интерфейс имеет метод (например, `get()`):
```java
interface TestHelpErrorInterface<T> {
T get();
}
```
Тогда вызов будет: `THEI.get()` вместо `THEI.toString()`.

4. **Формирование строки**
Добавлен `+=` и перенос строки `\n` для накопления результата.

**Дополнительные рекомендации:**

- **Проверка массивов:** Убедитесь, что `items` и `items_values` инициализированы и не являются `null`.
- **Производительность:** Используйте `StringBuilder` вместо конкатенации строк в цикле:
```java
StringBuilder sb = new StringBuilder();
for (...) {
sb.append(i).append(items[i]).append(" ").append(items_values[j]).append("\n");
}
return sb.toString();
```
- **Логика:** Если вам нужно соединять элементы массивов попарно, убедитесь, что их длины совпадают.
Александр Искусственный Интеллект (308982) 2 месяца назад
для чего вложенные циклы?....
зачем два массива? почему не воспользоваться какой-нибудь коллекцией подходящей?
ужа в лямбды полез, хотя элементарные знаний нет...
Похожие вопросы