#java #string #arraylist #return
#java #строка #arraylist #Возврат
Вопрос:
Мне удалось поместить значения ArrayList в строку, когда я распечатываю строку в консоли, все работает нормально, она получает всю информацию, но когда я возвращаю строку, она отображает только последний элемент.
например, в строке есть 3 гаража
BMW Garages
Mercedes Garages
Toyta Garages
Когда я возвращаю его, он отображает только последний:
Toyta Garages
Вот код, с которым я работаю:
private String arrayListToString()
{
NepGarazasCtr garCtr = new NepGarazasCtr();
ArrayList<NepGarazas> gautGar = garCtr.gautVisusGarazus();
String nepGar = "";
for(NepGarazas npGar: gautGar)
{
nepGar = npGar.getGarazoPav();
System.out.println(nepGar);
//System.out.println(Arrays.toString(nepGar));
}
return nepGar;
}
И вот где я это поместил:
String[] array = { arrayListToString() };
Итак, мой вопрос: как вернуть всю строку, а не только последний элемент? Или это невозможно? Я хочу поместить строку в JComboBox.
Спасибо.
Комментарии:
1. Попробуйте более упрощенные имена переменных на английском языке, которые понятны пользователям
Ответ №1:
Вы хотите установить некоторые String
в JComboBox
. Ну, вы можете просто использовать DefaultComboBoxModel<String>
.
Примечание: В приведенном ниже коде используется оператор diamond <>
из Java 7, вам следует изменить это, если вы используете и более старую версию Java.
String[] stringArray = arrayListToString() ;
DefaultComboBoxModel<String> comboBoxModel = new DefaultComboBoxModel<>(stringArray);
JComboBox<String> comboBox = new JComboBox<>(comboBoxModel);
Как вы можете видеть, вам просто нужно инициализировать stringArray
с помощью вашего метода.
Итак, основной ошибкой в вашем коде является возвращаемый тип arrayListToString()
, который может быть String[]
и нет String
.
private String[] arrayListToString() {
//Look at the Zhuinden's answer ;)
}
Возможно, вам также следует изменить имя метода, что-то вроде arrayListToStringArray()
должно быть более подходящим сейчас 🙂
Ответ №2:
По сути, проблема в том, что вы пытаетесь вернуть одну строку вместо фактического массива строк. Поэтому то, что вам нужно сделать, это фактически создать массив и вернуть его в переменную String[] , а не просто в один атрибут. Ваше решение может работать на C #, используя возврат yield в foreach, но не в этом сценарии. Поэтому вот простое решение проблемы, хотя и не самое лучшее (я создал новый список, а не создал массив размером с размер gautGar, я добавлю это в конец):
private String[] arrayListToString()
{
NepGarazasCtr garCtr = new NepGarazasCtr();
List<NepGarazas> gautGar = garCtr.gautVisusGarazus();
List<String> stringList = new ArrayList<String>();
for(NepGarazas npGar: gautGar)
{
stringList.add(npGar.getGarazoPav());
System.out.println(nepGar);
//System.out.println(Arrays.toString(nepGar));
}
return stringList.toArray(new String[stringList.size()]);
}
...
String[] array = arrayListToString();
Или просто сделайте
private String[] arrayListToString()
{
NepGarazasCtr garCtr = new NepGarazasCtr();
List<NepGarazas> gautGar = garCtr.gautVisusGarazus();
String[] stringArray = new String[gautGar.size()];
for(int i = 0; i < gautGar.size(); i )
{
NepGarazas npGar = gautGar.get(i);
stringArray[i] = npGar.getGarazoPav();
System.out.println(nepGar);
}
return stringArray;
}
Ответ №3:
Вы сказали, что он напечатал массив просто отлично, поэтому System.out.println(nepGar);
работает так, как вы хотите. Я думаю, ваша единственная проблема заключается в том, что в каждом цикле вы устанавливаете всю строку nepGar
в текущий элемент, то есть на последней итерации строка будет значением последнего элемента.
Вместо того, чтобы каждый раз указывать эту строку в качестве элемента, добавляйте каждый элемент, то есть последний элемент все равно будет частью string , но вы просто добавляете к нему. Я думаю, вы просто хотите изменить эту строку:
nepGar = npGar.getGarazoPav();
к этому:
nepGar = npGar.getGarazoPav() "n";
Комментарии:
1. Пока я думал об этом (хотя я бы также заставил его использовать StringBuffer), я думаю, что если ему это нужно для JComboBox , то они будут отдельными элементами, только если каждый из них представляет собой отдельную строку в String[] , а не один большой двоичный объект с новыми строками.
2. @Zhuinden StringBuffer совершенно не нужен при ответе на подобные вопросы. Они просто сбивают людей с толку. Но да, вы правы в том, что ему, вероятно, нужно вместо этого, однако я просто ответил на вопрос, который он специально задал для возврата строки.
3. Я бы предпочел показать им правильную практику, чтобы они не совершали глупых ошибок позже, согласно yoda.arachsys.com/java/strings.html
4. = со строками в цикле — очень плохая практика и огромный убийца производительности! Я бы воздержался от рекомендации этой практики!
5. @SeanPatrickFloyd Огромный убийца производительности? Он перебирает ArrayList с тремя элементами. Серьезно, в простых случаях, подобных этому, это ничего не делает.