Самая длинная строка в массиве (дублирование)
Я написал программу, которая находит самую длинную строку в массиве. Теперь мне нужен дополнительный функционал. Это включает в себя только дублирование строки в выводе, если количество максимальных букв n-строки равно m-строке
Например, ввод:
- этот
- должно быть
- самый длинный
- строка
- в массиве
Выход должен быть:
- самый длинный
- в массиве
Поскольку обе они (11 букв) являются самыми длинными строками (не только первая из них, но обе!). Заранее спасибо!
Код ниже:
public static void main(String[] args) throws Exception
{
ArrayList<String> list = new ArrayList<String>();
ArrayList <Integer> numList = new ArrayList<Integer>();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
for(int i=0; i<5; i++) {
String s = reader.readLine();
list.add(i, s);
numList.add(i, s.length());
}
int maxN = numList.get(0);
String maxS = list.get(0);
for(int i=0; i<list.size(); i++) {
if(numList.get(i)>maxN) {
maxN=numList.get(i);
maxS = list.get(i);
}
}
System.out.println(maxS);
}
2 ответа
Вы можете добавить другой список, который будет содержать ваши результаты и перебирать записи.
ArrayList<String> result = new ArrayList<>();
for(int i=0;i<list.size();i++){
if(list.get(i).length()==maxS){
result.add(list.get(i));
System.out.println(list.get(i));
}
}
Если вы собираетесь сравнивать длины строк элементов массива друг с другом, строго придерживайтесь тех длин, с которыми вы столкнетесь при переборе исходного списка ArrayList. Не то чтобы вы не могли, но нет реальной необходимости создавать еще один целочисленный ArrayList для хранения длины строк элементов всего, что содержится в исходном списке ArrayList, поскольку вы можете установить это с помощью своей первоначальной итерации. Все зависит от того, какие условия вы устанавливаете во время выполнения итерации.
Как уже указывал @Efka, у вас может быть еще один String ArrayList для хранения фактических элементарных строк, которые имеют самую длинную (и одинаковую) длину, и затем отображают эти результаты.
Естественно предполагается, что вы успешно заполнили список ArrayList строковыми элементами, поэтому:
ArrayList <String> dupList = new ArrayList<>(); // Will hold the results
// Need to start somewhere so...
// Initialize maxN with the string length of the first
// element contained within the 'list' ArrayList.
int maxN = list.get(0).length();
// Add the first element to the duplicate list.
dupList.add(list.get(0));
// We start our iteration from 1 instead of 0
// because we've already processed index 0
// above to establish a starting point.
for(int i = 1; i < list.size(); i++) {
int length = list.get(i).length(); //get the element length
if(length >= maxN) {
if (length > maxN) {
// Clear the duplicate list since there is
// now an elemental string that is longer.
dupList.clear();
// Set maxN to the new longest length
maxN = list.get(i).length();
}
// Add the new longest or equal to the longest
// element encountered to the duplicate list.
dupList.add(list.get(i));
}
}
Для отображения определенных результатов вы можете использовать что-то вроде этого:
// Display the determined results...
for (int i = 0; i < dupList.size(); i++) {
System.out.println(dupList.get(i));
}