Итак друзья...Решал я, решал..Уже голову сломал и вот выкладываю на ваш суд свой вопрос.

Вопрос по заданию: javarush.task.task08.task0812

Задача:

Cамая длинная последовательность

  1. Создай список чисел.
  2. Добавь в список 10 чисел с клавиатуры.
  3. Вывести на экран длину самой длинной последовательности повторяющихся чисел в списке. Пример для списка 2, 4, 4, 4, 8, 8, 9, 12,12, 14: 3 Искомое значение равно 3, т.к. самая длинная последовательность повторяющихся чисел состоит из трех четверок.

Суть в чем: никак не могу заставить адекватно работать-не учитывает 1 значение последовательности никак:

То есть: В примере ниже, прога должна была вывести "3" -но выводит 2. Почему-голову сломал:

1 2 3 4 5 6 7 8 8 8

2

Process finished with exit code 0

Мой код с решением:

package com.javarush.task.task08.task0812;

import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.concurrent.locks.ReadWriteLock;

/*
Cамая длинная последовательность
*/
public class Solution {
    public static void main(String[] args) throws IOException

    {
        //напишите тут ваш код
        ArrayList<Integer> list = new ArrayList<Integer>(10);

        for (int j=0; j<10; j++)
        {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

            String s = reader.readLine();
            int i = Integer.parseInt(s);
            list.add(i);
        }

        System.out.println(count(list));

    }

    public static int count(ArrayList<Integer> list)
    {

        int count = 0;
        int equal = 0;

        for (int i = 0; i <list.size(); i++)
        {

            if ((list.get(i).equals(equal))) {
                count++;
            } else

            {
                equal = list.get(i);

            }

        }

        return count;
    }
}

задан 20 Мар, 14:53

SEE_K's gravatar image

SEE_K
205
одобрено: 0%

изменено 20 Мар, 14:55


привет

логика не верна.. сначала почему 2 - для вашего варианта, вы сначала нашли первый элемент новой последовательности, но его не посчитали, счетчик не увеличили, он у вас равен 0...

ну и в целом к задаче - когда вы находите новый элемент, вы должны проверить значение предыдущей последовательности с найденным когда-то максимальным, если новая последовательность больше - то в максимум ее размер положите... а счетчик новой последовательности в единицу, ведь вы уже нашли новое значение... в equal положите list.get(0), счетчик тоже уже равен 1, а цикл с проверкой начните от 1...

ссылка

опубликован 20 Мар, 15:10

Rediska's gravatar image

Rediska
2.3k6
одобрено: 45%

хм.

34 строка - надо int count = 1 - ведь, если даже числа подряд не идут, то последовательность будет состоять из одного числа.

45 строка: тут у тебя закончились идущие подряд числа, так что в equal можно записать число этих повторений из count (но тут нужно будет добавить условие, что предыдущее число не больше текущего), а count сбросить обратно до 1, чтобы начать подсчет заново.

ну и в 51 строке верни equal

ссылка

опубликован 21 Мар, 05:51

%D0%9C%D0%B0%D1%80%D0%B3%D0%BE's gravatar image

Марго
1205
одобрено: 27%

все равно не получается...что не так делаю-хз...

package com.javarush.task.task08.task0812;

import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.concurrent.locks.ReadWriteLock;

/*
Cамая длинная последовательность
*/
public class Solution {
    public static void main(String[] args) throws IOException

    {
        //напишите тут ваш код
        ArrayList<Integer> list = new ArrayList<Integer>(10);

        for (int j=0; j<10; j++)
        {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

            String s = reader.readLine();
            int i = Integer.parseInt(s);
            list.add(i);
        }

        System.out.println(count(list));
    }

    public static int count(ArrayList<Integer> list)
    {

        int equal_count = 0;
        int equal = list.get(0);
        int temp =1;

        for (int i = 1; i <list.size(); i++)
        {
            if ((list.get(i).equals(equal)))
            {
                temp++;
            }

            else

            {
                equal = list.get(i);

                if (equal_count<temp)
                {
                    equal_count = temp;

                    temp = 1;

                }

            }

        }
        return equal_count;
    }
}
ссылка

опубликован 25 Мар, 16:44

SEE_K's gravatar image

SEE_K
205
одобрено: 0%

1

уберите органичение ArrayList и попробуйте такой вариант

1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10

думаю результат будет забавный

(25 Мар, 16:52) vampirit

Во втором варианте решения вы возвращаете (return) equal_count, но присваиваете ему значение только в блоке else. И temp вы присваиваете значение 1 только если equal_count < temp. Это тоже не правильно. Нужно менять значение когда одинаковая последовательность закончилась, не зависимо от значения equal_count

ссылка

опубликован 26 Мар, 08:42

EleNikIvi's gravatar image

EleNikIvi
2.0k127
одобрено: 35%

изменено 26 Мар, 08:43

Ваш ответ
включить просмотр

Следить за вопросом

По Email:

После авторизации вы сможете подписаться на любые обновления здесь

Основы Markdown

  • *italic* or _italic_
  • **bold** or __bold__
  • ссылка:[текст](http://url.com/ "заголовок")
  • изображение?![alt текст](/path/img.jpg "заголовок")
  • нумерованный список: 1. Foo 2. Bar
  • Для того чтобы добавить разрыв строки просто добавьте два пробела.
  • основные HTML тэги, также поддерживаются

Тэги:

×1

Задан: 20 Мар, 14:53

Просмотров: 98 раз

Отредактирован: 26 Мар, 08:43

Похожие вопросы