Нечетное число Последовательность заменена графом - PullRequest
0 голосов
/ 01 сентября 2018

Я работаю над Java-программой

вот программа Вопрос: Рассмотрим программу Java. Он читает целые числа из стандартного ввода (пока не получит отрицательное число) и помещает их в массив. После этого он вызывает processArray для массива, и затем выводит содержимое массива на стандартный вывод. в программе любая последовательность из двух или более последовательных нечетные числа в массиве удаляются из массива и заменяются одним числом, представляющим длину этой последовательности. Функция / метод processArray должны модифицировать массив на месте (желательно без создания нового массива) и возвращать новую длину измененного массива.

Например, если эти цифры были указаны на стандартном входе:

222
3
35
62
124
61
29
375
66
7
-1

Тогда программа должна вывести:

222
2
62
124
3
66
7

Обратите внимание, что последовательность 3, 35 была заменена на 2, а последовательность 61, 29, 375 была заменена на 3.

вот мой код :

import java.util.*;
import java.io.*;

public class Main {
    public static int processArray(ArrayList<Integer> array) {
        ListIterator<Integer>iterator=array.listIterator();
        while (iterator.hasNext()) {
            Integer integer = (Integer) iterator.next();
            int count=0;
            if (integer%2!=0) {
                count=count++;
                iterator.remove();
                continue;
            }
            if(integer==-1)
                break;
            else
                iterator.previous();
            iterator.add(count);
            iterator.next();


        }

        return array.size();
    }

    public static void main (String[] args) {
        ArrayList<Integer> arrayList = new ArrayList<Integer>();
        Scanner in = new Scanner(System.in);
        while(in.hasNextInt()) {
            int num = in.nextInt();
            if (num < 0) 
                break;
            arrayList.add(new Integer(num));
        }
        int new_length = processArray(arrayList);
        for(int i=0; i<new_length; i++)
            System.out.println(arrayList.get(i));
    }
}

Моя логика не работает. Помогите улучшить логику

Ответы [ 4 ]

0 голосов
/ 29 декабря 2018

Попробуйте ниже Логика.

public static int processArray(ArrayList<Integer> array) {
    int count=0;
    for(int i=0;i<array.size();i++)
    {
        if((array.get(i)%2)!=0) //odd
        {
            count++;
            if(count>1)     //I had to replace length of  odd seq greater than or equal to 2
            {
                array.set(i,count);     //set curren count to current odd no and remove previous odd number
                array.remove(i-1);
                if(i>0)     //For handling change in indices
                    i=i-1;
                else
                    i=0;
            }
        }
        else
        {
            count=0;
        }
    }
    return array.size();
}
0 голосов
/ 01 сентября 2018
  • Вы должны добавить еще один цикл в processArray (), который выполняется при обнаружении нечетного числа и увеличивает счетчик
  • Перед циклом сохраните номер в качестве резервной копии
  • Затем перед добавлением проверьте счетчик, если он больше 1, затем замените число на счетчик, в противном случае используйте целое число резервного копирования

    Вам также следует сохранить позицию итератора первого нечетного числа.

0 голосов
/ 01 сентября 2018

В processArray необходимо переместить int count=0; наружу (до) цикла while.

В цикле while ваша обработка нечетного регистра в основном правильная. Однако вам нужно добавить предложение else для обработки четного случая. Это должно выглядеть примерно так (псевдокод):

if odd
    count++;
    remove current element
else
    if count > 0 
        add count to the array
        set count to zero
    add current element

Все остальное в цикле while можно удалить.

Вам также необходимо обработать случай, когда список заканчивается последовательностью нечетных чисел. Вы должны обработать это после того, как цикл while завершится, проверив, является ли count> 0.

0 голосов
/ 01 сентября 2018

Добавление еще одной проблемы:

Вы должны удалить:

if (integer == -1) break;

, так как вы удалили отрицательные числа в первом цикле

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...