• ,

не проходит тестирование

Работает как надо,
но я уже забодался гадать, что этой проверке нужно:
может кто подскажет?
package com.javarush.test.level09.lesson11.home05;

import java.awt.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;

/* Гласные и согласные буквы
Написать программу, которая вводит с клавиатуры строку текста.
Программа должна вывести на экран две строки:
1. первая строка содержит только гласные буквы
2. вторая - только согласные буквы и знаки препинания из введённой строки.
Буквы соединять пробелом, каждая строка должна заканчиваться пробелом.

Пример ввода:
Мама мыла раму.
Пример вывода:
а а ы а а у
М м м л р м .
*/

public class Solution
{

    public static void main(String[] args) throws Exception
    {
        //напишите тут ваш код
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String string = reader.readLine();
        char[] arr = string.toCharArray();
        LinkedList<Character> list = new LinkedList<>();
        for (int i = 0; i < arr.length; i++)
        {
            list.add(arr[i]);
        }
        LinkedList<Character> lv = new LinkedList<>();
        for (int i = 0; i < list.size(); i++)
        {
            if (isVowel(list.get(i))){
                lv.add(list.get(i));
                list.remove(i);
                if (i!=0) i--;
            }
            if (list.get(i) == " ".charAt(0)) list.remove(i);
        }
        System.out.println(setStr(lv));
        System.out.print(setStr(list));
    }

    public static char[] vowels = new char[]{'а', 'я', 'у', 'ю', 'и', 'ы', 'э', 'е', 'о', 'ё'};

    //метод проверяет, гласная ли буква
    public static boolean isVowel(char c)
    {
        c = Character.toLowerCase©;  //приводим символ в нижний регистр - от заглавных к строчным буквам

        for (char d : vowels)   //ищем среди массива гласных
        {
            if (c == d)
                return true;
        }
        return false;
    }

    public static String setStr (LinkedList list)
    {
        String str="";
        for (int i = 0; i < list.size(); i++)
        {
            str += list.get(i)+" ";
        }
        return str;

    }
}

5 комментариев

aiv
  • aiv
  • 0
Попробуйте убрать пробел в конце строки str перед возвратом из метода setStr.
kfifm
Так это противоречит условиям задачи, написано же: «каждая строка должна заканчиваться пробелом.»
Но в любом случае я задачу уже решил, другим способом через цикл, в котором, буква за буквой, формирую две строки.
А два раза прогнать через проверку я не могу.
Yuri_0504
Тестируйте свой код тщательней, он не рабочий.
Зачем вы импортируете awt пакет?
import java.awt.*;
funner
  • funner
  • +1
  • Комментарий отредактирован 2016-11-20 14:01:54 пользователем funner
мама мыла арку
а а ы а у 
м м м л а р к
Вероятно что-то с нумерацией массивов (обратите внимание на удаление).
for (int i = 0; i < list.size(); i++)
        {
            if (isVowel(list.get(i))){
                lv.add(list.get(i));
                list.remove(i);
                if (i!=0) i--;
            }
            if (list.get(i) == " ".charAt(0)) list.remove(i);
        }
Т.е. при перебросе в массив lv символ не просто удаляется, но вы вызываете даже в этом случае i--, пропуская лишние символы без проверки.
вот в этой части
if (i!=0) i--;
kfifm
  • kfifm
  • 0
  • Комментарий отредактирован 2016-11-20 16:30:23 пользователем kfifm
Спасибо за наводку, действительно была ошибка, если слово после пробела, начиналось с гласной, как в вашем примере " арка" буква «а» пропускалась. Лечится заменой: {list.remove(i); if (i!=0) i--;} вместо list.remove(i).
Удалить удалил, а i декрементировать забыл. Жаль, что сейчас не проверишь на сервере.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.