Как правильно передать массив в метод?

151
23 февраля 2021, 17:30

Вопрос глупый, но сижу уже несколько часов. Мне нужно в созданный массив добавить кучу текстовых строк. Я хочу сделать это методом, который можно убрать подальше. Но реализация подкачала в области синтаксиса((

Я догадываюсь что ошибка в объявлении и, возможно, вызове метода. Как будет проще и правильнее написать этот кусок?

Спасибо.

P.S. Там строк под сотню, я просто убрал для примера

public static void main(String[] args) {
    setVariables();
    ArrayList<Boolean> answers = new ArrayList<Boolean>(); // ответы да и нет
    ArrayList<String> questions = new ArrayList<String>(); // текст вопросов
    questions.addQuestions();
}

 public static addQuestions(ArrayList<String>) {
     ArrayList<String> questions = new ArrayList<String>();
     questions.add("У Вас чаще бывает веселое и беззаботное настроение?");
     questions.add("Вы чувствительны к оскорблениям?");
     return questions;
}
Answer 1

Вам нужно не передать массив в метод, а вернуть из метода заполненный ArrayList (не путайте с массивом, это другой тип). То, что вы пытаетесь сделать -- questions.addQuestions(); -- это попытка вызвать метод addQuestions() объекта questions. Для того, чтобы так можно было сделать, нужно, чтобы объект questions относился к классу, у которого определен метод addQuestions(). НО у вас questions объявлен как объект класса ArrayList. У этого класса есть методы add(), forEach(), clear() и прочие (смотрите справку), но нет метода addQuestions(), именно поэтому компилятор на ваш код и ругается.
Я бы сделал вот так:

public static void main(String[] args) {
    setVariables();
    ArrayList<Boolean> answers = new ArrayList<>(); // Тоже 
    List<String> questions = сreateQuestionList();
}
public static List<String> сreateQuestionList() { // Создает и возвращает список
    ArrayList<String> questions = new ArrayList<>();
    questions.add("У Вас чаще бывает веселое и беззаботное настроение?");
    questions.add("Вы чувствительны к оскорблениям?");
    return questions;
}

А вообще читайте сообщения об ошибках, которые выдает компилятор. Чаще всего они прямо и недвусмысленно указывают на ошибки в вашем коде.

Прочитайте также какую-нибудь книжку по Java (см. Книги и учебные ресурсы по Java), тогда дело пойдет быстрее и шишек меньше будет.

Answer 2

Вам нужно просто сделать void, которые ничего не возвращает и просто заполняет список (это не массив). В этот метод вы передаёте только ссылку на список, через которую в него добавляются элементы. И метод addQuestions вызывается напрямую, он относится к текущему классу, а не к списку.

public static void main(String[] args) {
    setVariables();
    ArrayList<Boolean> answers = new ArrayList<Boolean>();
    ArrayList<String> questions = new ArrayList<String>();
    addQuestions(questions);
}

public static void addQuestions(ArrayList<String> questions) {
    questions.add("У Вас чаще бывает веселое и беззаботное настроение?");
    questions.add("Вы чувствительны к оскорблениям?");
}
READ ALSO
Обработать пустой ответ JSON

Обработать пустой ответ JSON

С сервера приходит ответ такого плана:

121
Валидация всех полей формы

Валидация всех полей формы

Как сделать чтобы валидация происходиладля всех полей сразу а не по одному

108
Решето Эратосфена на js

Решето Эратосфена на js

Дано число n (n > 1)Выведите строку, состоящую из простых чисел, меньших n

232
Await Promise.race(&hellip;)

Await Promise.race(…)

Как правильно использовать await с Promiserace? Пример:

141