Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Jocker
1 / 1 / 2
Регистрация: 22.01.2015
Сообщений: 150
#1

Ошибка в проверке строк на символы с последующим выводом - Java SE

19.02.2018, 01:02. Просмотров 204. Ответов 6
Метки нет (Все метки)

Добрый день, есть задание согласно которому пользователь вводит в одну строку символы, разделённые пробелом, необходимо вывести все слова у которых одинаковые буквы. Программа завершается корректно в случае, когда нету подходящих слов, но в случае, если они есть - выбивает ошибку в строках 11 и 55. Помогите, пожалуйста.
P.S. Код немного запутан, оптимизацией займусь при рабочей программе, добавил везде комментарии, чтобы проще было понять код.
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
59
60
61
62
63
package com.company;
 
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        System.out.println("Enter words, please!");
        Scanner in = new Scanner(System.in);
        String[] correctWords;                           // Создаём массив "правильных" слов
        correctWords = StringChecking(in.nextLine());    // Вызываем метод, в который передаём введенную пользователем строку
        int lenght = correctWords.length;
        for (int i = 0; i<lenght; i++)
            System.out.println();
    }
 
    private static String[] StringChecking(String string)
    {
        String[] words = string.split(" "); // разбиваем строку на слова по пробелу
        String[] correctStrings = {};
        boolean result = true;
        char[] word;
        char symbol = ' ';
 
        //Во внешнем цикле перебираем все слова на нужное слово и добавляем в массив, если нашли
        for (int i=0; i<words.length ;i++)
        {
            // Переводим каждое слово в массив символов
            word = words[i].toCharArray();
 
            // Во внутреннем - перебираем отдельные символы
            for (int y = 0; y<word.length; y++)
            {
                // Запоминаем первый символ слова
                if(y==0)
                    symbol = word[y];
                    // Для всех последующих символов
                else
                {
                    // Если символ слова совпал со знаком
                    if (word[y] == symbol)
                        continue;
 
                    // Если не совпал, переводим флаг в режим false и заканчиваем перебор символов
                    else
                    {
                        result = false;
                        break;
                    }
                }
            }
            // Если все знаки совпали и флаг остался "положительным", то добавляем слово в массив
            if (result)
            {
                correctStrings[correctStrings.length] = word.toString();
            }
            else continue;
        }
 
        // Возвращаем массив "правильных" слов
        return correctStrings;
    }
}
Добавлено через 5 минут
P.P.S Работаю в IntelliJ, к ней ещё не привык, может там можно как-нибудь дебажить и проверять данные пошагово?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2018, 01:02
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка в проверке строк на символы с последующим выводом (Java SE):

Читать файл, с последующим выводом на экран
Есть текстовый файл, содержимое которого выглядит следующим образом: Noah ...

Cложность с выводом двух строк PrintWriter
Доброго дня! У меня возникает эм, некая сложность в реализации моей &quot;супер...

Из двух строк сделать одну, в которой поочередно будут символы двух строк
Из двух строк сделать одну, в котором поочередно будут символы двух строк.

Поиск значения с последующим выводом
Есть код, который работает, но маленький недостаток . В БД хранятся номера в...

Поиск значения с последующим выводом
Помогите ламеру в php. Суть такая. Нужно организовать поиск по указанным...

Сортировка массивов с последующим выводом в richTextBox
имеется 2 массива типа string и int. string imena; int nomera; for...

6
xoraxax
1228 / 1183 / 349
Регистрация: 05.07.2013
Сообщений: 5,725
Завершенные тесты: 1
19.02.2018, 07:04 #2
Можно, даже туториалы на Ютубе есть
0
Aviz__
336 / 232 / 91
Регистрация: 17.02.2014
Сообщений: 1,770
20.02.2018, 10:45 #3
a так?
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
import java.util.Arrays;
import java.util.Scanner;
 
public class CyberWord {
 
    private static boolean isEquilContent(String str1, String str2) {
        char [] contStr1 = str1.toCharArray();
        char [] contStr2 = str2.toCharArray();
        Arrays.sort(contStr1);
        Arrays.sort(contStr2);
        return Arrays.equals(contStr1, contStr2);
    }
 
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.printf("%s%n", "Вводите слова через пробел");
        String [] words = input.nextLine().toLowerCase().split(" ");
        if (words.length < 2)
            System.exit(1);
        for (int i = 0; i < words.length; i++) {
            for (int j = i + 1; j < words.length; j++) {
                if (isEquilContent(words[i],words[j]))
                    System.out.printf("Состав %s и %s однаков%n", words[i], words[j]);
            }
        }
    }
}
0
Jocker
1 / 1 / 2
Регистрация: 22.01.2015
Сообщений: 150
21.02.2018, 01:17  [ТС] #4
Цитата Сообщение от Aviz__ Посмотреть сообщение
a так?
Вы немного не правильно поняли задание, Вы сравниваете 2 слова, а на вход поступает одна большая строка, которая содержит слова. Нужно вернуть массив всех слов, у буквы которых одинаковы. Например:
Вход: "qwer qqq ww ttyr sss"
Выход: "qqq ww sss"
0
korvin_
2096 / 1587 / 308
Регистрация: 28.04.2012
Сообщений: 5,720
21.02.2018, 02:41 #5
Цитата Сообщение от Jocker Посмотреть сообщение
выбивает ошибку в строках 11 и 55
Естественно. Тебе даже пишет какую. Ты не читаешь, что ли?
0
Aviz__
336 / 232 / 91
Регистрация: 17.02.2014
Сообщений: 1,770
21.02.2018, 14:34 #6
Jocker, жаль, но реализация "не правильного" понимание доставило мне удовольствие)). Спасибо!

Добавлено через 5 часов 38 минут
вот, еще одна зарисовка))
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
import java.util.Scanner;
 
public class CyberWord {
    private static String [] strBox = new String[1];
    private static int indexBox = 0;
 
    private static void addStrInBox(String addingStr) {
        if (indexBox != strBox.length)
            strBox[indexBox++] = addingStr;
        else {
            String [] newBox = new String[strBox.length * 2];
            int tmpIndex = 0;
            for (String tmpSt : strBox)
                newBox[tmpIndex++] = tmpSt;
            newBox[tmpIndex++] = addingStr;
            indexBox = tmpIndex;
            strBox = newBox;
        }
    }
 
    private static boolean isEquilContent(String str1) {
        char firstLetter = str1.charAt(0);
        for (char tmpCh : str1.toLowerCase().toCharArray())
            if (firstLetter != tmpCh)
                return false;
        return true;
    }
 
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.printf("%s%n", "Вводите слова через пробелы");
        String [] words = input.nextLine().toLowerCase().split(" ");
 
        for (String tmpWord : words) {
            if (isEquilContent(tmpWord))
                addStrInBox(tmpWord);
        }
        for (String tmpSt : strBox)
            if (tmpSt != null)
                System.out.printf("%s, ", tmpSt);
    }
}
0
Jocker
1 / 1 / 2
Регистрация: 22.01.2015
Сообщений: 150
21.02.2018, 23:52  [ТС] #7
Цитата Сообщение от korvin_ Посмотреть сообщение
Естественно. Тебе даже пишет какую. Ты не читаешь, что ли?
Я прочитал, просто не сразу понял что именно привело к ошибке, сейчас уже исправил её)
0
21.02.2018, 23:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2018, 23:52
Привет! Вот еще темы с решениями:

Считывание из бинарного файла в структуру с последующим выводом
В бинарном файле храниться инфа: Имя_пользователя дата_подключения номер...

Загрузить данные из БД в DataTable с последующим выводом в DGV
помогите пожалуйста ;) мне нужна чтобы из база данных перенести информацию в...

Парсер базы данных с последующим выводом информации
Есть текстовый документ. В нем несколько записей подобной конструкции(кол-во...

Поиск в файле по определенным критериям с последующим выводом на печать
Всем доброго времени суток! Я только начинаю изучать PHP и столкнулся с такой...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru