Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.51/35: Рейтинг темы: голосов - 35, средняя оценка - 4.51
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232

Как из результатов метода создать массив строк?

30.09.2021, 23:26. Показов 7765. Ответов 99
Метки нет (Все метки)

Аналогичная проблема встретилась уже второй раз. У меня в коде есть метод, который обрабатывает строки из массива строк и создаёт из них другие строки по определённым параметрам. Я не знаю, как из результатов метода(это несколько символов) создать строку, а из строки новый массив строк. Чтобы впоследствии совершать с новыми строками другие действия. Конкретно сейчас задача: ввести массив строк. Вывести строку, в которой больше всего заглавных букв. Я создала массив (вернее, список) строк с помощью ввода с консоли. Потом написала два метода. Первый обрабатывает строки массива по очереди.Создаёт строку того же размера, что и исходная, из заглавных букв. Сравнивает с исходной и выводит совпадения, т.е. заглавные буквы.Это и есть результат этого метода.Как я понимаю, это просто несколько символов. Даже не строка. Второй метод сравнивает длину новых строк с максимумом и выводит строку с максимальной длиной, т.е. строку с наибольшим количеством заглавных букв. Вроде бы всё логично, но я не знаю, как из результатов первого метода создать массив строк, чтобы перейти ко 2 методу. Я пыталась из символов в 1 методе создать массив, чтобы потом из него создать строку. Но вместо массива выводятся квадраты по количеству символов. Пожалуйста, помогите кто-нибудь. Я решаю это уже неделю.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
public class Bubble {
    public static Scanner sc = new Scanner(System.in);
     public static void main(String[] args) {
         ArrayList<String>strings=new ArrayList<String>();
    int max=0;
    String maxS="";
    char[]result=new char[5];
    for(int i=0;i<5;i++){
      String str=sc.next();
      strings.add(str);// складываем строки в массив
       ArrayList<String>strings1=new ArrayList<String>();
        String[]stringsArr=new String[strings1.size()];
    for(int j=0;j<strings1.size();j++){
        stringsArr[j]=strings1.get(j);
    }
       for(int j=0;j<5;j++){
          String str1="";
      strInMass(str,str1,result);        
      strings1.add(str1);// складываем строки в массив       
    }
       lengthS(stringsArr,max,maxS);
    }
     }
    public static void strInMass(String s,String str1,char[]result){
        int k=0;
                    String n=sc.nextLine();    
     char[]chArray=n.toCharArray();//преобразуем строку в массив
     for(int i = 0; i<chArray.length; i++){
System.out.print(chArray[i]);// выводим массив
     }
    System.out.println();
        String n1=n.toUpperCase();//преобразуем символы строки в верхний регистр
      char[]chArray1=n1.toCharArray(); //преобразуем строку,
      //преобразованную в верхний регистр в массив
    for(int i = 0; i<chArray.length; i++){  
      if(chArray[i]==chArray1[i]){//сравниваем два массива
      result[k]=chArray[i];//засовываем элементы новой строки в массив
      k++;
     System.out.print(chArray[i]+"");//выводим совпадающие элементы,
      //т.е. заглавные буквы в строке str  
      }
 str1=new String(result);//преобразуем массив символов result в строку str1
    }
     }
    public static void lengthS(String[] stringsArr,int max,String maxS){
        //сравниваем длины всех строк в массиве strings1
       for(int j=0;j<stringsArr.length;j++){//пробегаем по массиву     
         if(stringsArr[j].length()==max){//сравниваем длину каждой строки с максимумом
             max=stringsArr[j].length();//находим наибольшее количество заглавных букв среди строк
                   maxS=stringsArr[j];//находим строку с наибольшим количеством заглавных букв
         }  
       }
          System.out.println(maxS);     
}
     }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.09.2021, 23:26
Ответы с готовыми решениями:

Как проверка результатов метода Ньютона программы с настройкой «Поиск решения»
Как проверка результатов программы с помощью MS Excel, корни найти с помощью настройки «Поиск решения». Мне был дан метод Ньютона X^3+X^2+1...

Как создать Массив строк?
вот уж с чем никогда проблем не было.. но не получается создать массив строк. программа должна: 1 создавать массив строк. 2...

Как создать массив строк
как сделать массив строк mas, если n=10^6 Добавлено через 8 часов 25 минут up!

99
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
05.10.2021, 12:33  [ТС]
xoraxax, согласна, это преинкремент, а я использую постинкремент. Сейчас я решаю совсем другую задачу, поэтому ошиблась. Так зачем он здесь?
Интеллектуальная игра - сделать рабочий код как можно короче
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
05.10.2021, 13:35
Отличная интеллектуальная игра - разобраться, почему же тут преинкремент
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
05.10.2021, 13:52  [ТС]
xoraxax, пыталась. Теоретически я понимаю, что преинкремент сначала увеличивает переменную на 1, а потом выполняет операцию, а постинкремент сначала выполняет операцию, а потом увеличивает переменную на 1. Но зачем это нужно в данном случае я не понимаю. Чтобы вывести строки не в том порядке, что в исходном массиве?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38207 / 21140 / 4311
Регистрация: 12.02.2012
Сообщений: 34,751
Записей в блоге: 14
05.10.2021, 14:25
Цитата Сообщение от Sollita Посмотреть сообщение
Канель пишет, что код должен быть "дружественным к прочтению", и я с ним согласна.
- вам еще "есть куда расти". Что же до длины, то вот:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.util.Scanner;
public class Main
{
    public static void main(String[] args) {
        char a;
        int i,max=0,j,k=0,ptrN=0;
        String [] buf = new String[25];
        int    [] num = new int[25];
        Scanner inp = new Scanner(System.in);
        for (i=0; i<25; i++) {
            buf[i]=inp.next();    
            j=0;
            for (int u=0; u<buf[i].length(); u++) {
                a=buf[i].charAt(u);
                if ((a>='A' && a<='Z') || (a>='А' && a<='Я')) j++;
            }
            if (j>max) {
                num[0]=i;
                ptrN=0;
                max=j;
            }
            else if (j==max) num[++ptrN]=i;
        }
        System.out.println("Строки с максимальным к-вом заглавных букв:");
        for (i=0; i<=ptrN; i++) {
            k=num[i];
            System.out.println(buf[k]);
        }
    }
}
При этом я просто убрал второй метод (перенес его код в первый).

Цитата Сообщение от Sollita Посмотреть сообщение
Я проверила, оно так тоже работает, просто выводит строки в другом порядке.
- нет.
"оно" так не работает. Когда найдена строка с длиной, большей предыдущего максимума, эта новая длина заносится в нулевую ячейку массива num. Если одна из следующих строк имеет ту же длину, что и текущий максимум, а записано

Java
1
num[ptrN++]=...
то новая длина ляжет в ту же нулевую ячейку (потому, что при выполнении этого присвоения ptrN инкрементируется после присвоения. А нужно, чтобы до. Поэтому так же правильно будет записать:

Java
1
2
ptrN++;
num[ptrN]=...
Но не так

Java
1
num[ptrN]=...; ptrN++;  // строки будут теряться (или даже вывод станет неправильным)
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
05.10.2021, 15:01  [ТС]
Catstail, я знаю, что мне есть куда расти
Думаю, что я тоже могу убрать метод, который создаёт строки из заглавных букв исходных строк, и внести его в основной метод. Но жалко убивать на это время. Я давно решаю совсем другие задачи. Но за идею спасибо. Я не думала, что можно решить такую задачу без методов. Позже посмотрю.

По поводу декремента проверьте, ничего не теряется.

При:
num[ptrN]=i;
ptrN++;
и
num[ptrN++]=i;
Выводит:
dRfgtYUI
TYbOI
GHYU
При:
ptrN++;
num[ptrN]=i;
и
num[++ptrN]=i;
Выводит:
GHYU
dRfgtYUI
TYbOI

Т.е. просто меняется порядок выведенных слов.
Этот вопрос меня интересует, потому что я всегда, создавая массив из элементов другого массива, использую вариант num[ptrN]=i;
ptrN++;
Возможно, что это можно делать не во всех случаях?
1
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
05.10.2021, 15:04
т.е. просто разберись, как работает код, там 6 строчек надо понять

Добавлено через 22 секунды
2 из которых скобки
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38207 / 21140 / 4311
Регистрация: 12.02.2012
Сообщений: 34,751
Записей в блоге: 14
05.10.2021, 15:17
Sollita, увы, не только теряется, но иногда и лишнее захватывает:

На этих данных:

AAAsgdggdfh
BsBBBB
AAAsgdggdfh
ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯWWWWW
BsBBBBHHHHHHHHHHHHHHHHWWWWW
AAAsgdggdfh
BsBBBB
AAAsgdggdfh
BsBBBB
AAAsgdggdfh
BsBBBB
AAAsgdggdfh
BsBBBB
AAAsgdggdfh
BsBBBB
AAAsgdggdfh
BsBBBB
BsBBBBHHHHHHHHHHHHHHHHWWWWW
AAAsgdggdfh
BsBBBB
AAAsgdggdfh
BsBBBB
AAAsgdggdfh
BsBBBB
AAAsgdggdfh
BsBBBB
AAAsgdggdfh
BsBBBB
AAAsgdggdfh
BsBBBB
AAAsgdggdfh
BsBBBB
AAAsgdggdfh
BsBBBB

Результат с num[++ptrN]=i получается:

Строки с максимальным к-вом заглавных букв:
ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯWWWWW
BsBBBBHHHHHHHHHHHHHHHHWWWWW
BsBBBBHHHHHHHHHHHHHHHHWWWWW

А с num[ptrN++]=i

BsBBBBHHHHHHHHHHHHHHHHWWWWW
BsBBBBHHHHHHHHHHHHHHHHWWWWW
AAAsgdggdfh

Что неверно ("залетела" лишняя строка, а одна из правильных "проглотилась"

Добавлено через 1 минуту
Цитата Сообщение от Sollita Посмотреть сообщение
Возможно, что это можно делать не во всех случаях?
- программирование не сводится к схемам. В каждом конкретном случае нужно понимание...
1
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
05.10.2021, 15:32  [ТС]
Catstail, спасибо, разберусь.
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
06.10.2021, 06:09
Цитата Сообщение от Sollita Посмотреть сообщение
Закончу двумерные масивы, потом коллекции, потом возьмусь за стримы.
После коллекций за стримы не стоит браться - есть еще темы, которые нужно разбирать. Например, исключения.
Иначе будет получаться как то самое решение в 3 строчки, которое на самом деле не рабочее на граничных условиях.
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
06.10.2021, 10:20  [ТС]
Tavashi, я знаю, спасибо План таков:
Базовые конструкции и ООП
Обобщённое программирование
Коллекции
Исключения
Потоки ввода-вывода
Многопоточное программирование
Введение в свинг
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
06.10.2021, 10:54
Tavashi, из праздного интереса: а какие граничные условия, на которых решение в "3 строчки" "ломается"?
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
06.10.2021, 16:15  [ТС]
Arsegg, вот-вот, и из не праздного тоже Я так и не поняла, почему "ломается"? Как вообще может быть выведена в данном случае строка с тремя заглавными буквами? Это же противоречит условию: 3 не больше 25, и не равно ему. Но теперь хоть знаю, что этого можно ожидать.
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
08.10.2021, 04:50
Arsegg, автору этих строк будет легко разобраться:
Цитата Сообщение от Arsegg Посмотреть сообщение
Что там изучать? Пара вечеров за документацией и чашечкой чая.
0
08.10.2021, 10:47

Не по теме:

Tavashi, как некрасиво с темы съезжать!

0
08.10.2021, 12:09

Не по теме:

Arsegg, не нужно выдавать желаемое за действительное.

0
08.10.2021, 12:23

Не по теме:

Tavashi, если сказал А, то уж говори Б - все-таки не в зоопарке, где каждый "кукарекать" горазд.

0
08.10.2021, 12:31

Не по теме:

Arsegg, граничный случай - я уже написал. Это уже более чем подсказка. Тот, кто изучил стримы за пару вечеров по докам не только поймет где ошибка, но и сможет ее исправить.

0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
08.10.2021, 13:36  [ТС]
Tavashi, спасибо за разъяснения, но я думала,что Вы пишете о решении в 3 строчки в коде Catstail, о котором мы с ним писали. Код в три строчки, о котором Вы писали, я даже не пыталась разобрать, потому что стримы не изучала и не думаю, что их можно изучить за два дня Поэтому посмотрю Ваш комментарий позже, когда буду понимать, о чём он.
Может быть, Вы можете объяснить, почему ломается решение с num[ptrN++]=i или num[ptrN]=i;ptrN++; ?
Я думала, что если выведу массив num, то что-нибудь пойму, но запуталась ещё больше. Вместо индексов строк с максимальным количеством заглавных букв массив num в этих случаях с какого-то момента начинает выводить нули. Почему?
0
08.10.2021, 14:08

Не по теме:

Tavashi, к чему витиеватые изъяснения? Если есть что сказать, то говори прямо.
P. S. Уже не в первый раз замечаю за тобой такое, что печально. Крайне непрофессионально так себя вести по отношению к другим.

0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
12.10.2021, 17:45
Цитата Сообщение от Sollita Посмотреть сообщение
Может быть, Вы можете объяснить, почему ломается решение с num[ptrN++]=i или num[ptrN]=i;ptrN++; ?
Потому что в случае с пост-инкрементом перезаписывается предыдущее максимальное значение. Другими словами, переменная ptrN это счетчик, который должен сбрасываться в нулевое состояние в случае нахождения максимальной строки на определенном уровне итерации. Далее, следующие строки равные по длине с максимальным значением должны записываться в следующие ячейки массива. Для этого нужно сначала увеличить значение счетчика (указателя), а потом провести запись. Но не наоборот, потому что в этом случае потеряется одно из максимальных значений строки и возьмется одно лишнее, потому что вывод результатов устроен через такой цикл:
Java
1
for (i=0; i<=ptrN; i++) {
Цитата Сообщение от Sollita Посмотреть сообщение
Вместо индексов строк с максимальным количеством заглавных букв массив num в этих случаях с какого-то момента начинает выводить нули. Почему?
Так инициализируется массив - нулями.
Цитата Сообщение от Sollita Посмотреть сообщение
стримы не изучала и не думаю, что их можно изучить за два дня
Это верно и граничный случай был тому подтверждением.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.10.2021, 17:45

History. Как создать массив строк, как его заполнить, и как производить перебор элементов
Добрый день, мне нужно реализовать некое подобие хистори. Поясню: есть некое окно, в котором вводится сообщение и при его отправки, тобишь...

Как создать двумерный массив строк
Добрый день. Я хочу сделать двумерный массив строк, создаю его, но при выводе нужно перегрузить оператор вывода(&lt;&lt;), как его...

Как создать динамический массив строк?
Делаю лабораторную и пока только разбираюсь, как создать динамический массив строк Написал вот это, но при печати строки появляется...

Как создать массив строк, считанных из файла?
Необходимо создать массив из строк, которые находятся в файле. После того, как мы загоним каждую строку в отдельную ячейку массива, нужно...

Как создать массив строк типа String^?
Как создать массив строк типа String^ ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Новые блоги и статьи
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru