JavaRush/Java блог/Архив info.javarush/Кухня(); Задание N2.
terranum
28 уровень

Кухня(); Задание N2.

Статья из группы Архив info.javarush
участников
Кухня(); Задание N2. - 1 Правила [Одномерные массивы] 2. В целочисленной последовательности есть нулевые элементы. Создать массив из номеров этих элементов.
Комментарии (12)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
timurnav
Уровень 21
7 октября 2015, 14:16
public static int[] method(int[] array){
        int[] tmp = new int[array.length];
        int count = 0;
        for (int i = 0; i < array.length; i++) {
            if(array[i]==0) tmp[count++] = i;
        }
        return Arrays.copyOf(tmp, count);
    }
RabenokDmitry
Уровень 21
4 февраля 2015, 23:26
Интересное решение c Arrays.copyOf позаимствовал у Docktor91 :)


    public static int[] getIndexZeroElements(int[] array) {
        int[] result = new int[0];
        for (int i = 0; i < array.length; i++) {
            if (array[i] == 0) {
                result = Arrays.copyOf(result, result.length + 1);
                result[result.length - 1] = i;
            }
        }

        return result;

    }
Kashey
Уровень 11
13 сентября 2014, 17:14
У меня так получилось, по простому. На большее пока не выучился :)
public static int[] getIndexZeroArray(int[] array)
    {
        int count = 0;
        for (int i = 0; i < array.length; i++)
        {
            if (array[i] == 0) count++;
        }

        int[] newArray = new int[count];
        count = 0;
        for (int i = 0; i < array.length; i++)
        {
            if (array[i] == 0) newArray[count++] = i;
        }
        return newArray;
}
Docktor91
Уровень 40
20 августа 2014, 01:04
более компактная версия Voronblack
public static int[] zerosIndexArray (int[] arr)
    {
        if (arr.length==0)
            return null;
        int[] result = new int[0];
        for(int i = 0; i < arr.length; i++ )
        {
            if (arr[i] == 0)
            {
                result = Arrays.copyOf(result, result.length + 1);
                result[result.length - 1] = i;
            }
        }
        return result;
    }
Voronblack
Уровень 17
20 августа 2014, 07:04
У меня почему то данная форма записи в идеи подкрасилась красным, думал что так нельзя, пришлось добавлять второй массив
result = Arrays.copyOf(result, result.length + 1);

Так на много красивее =)
terranum
Уровень 28
20 августа 2014, 09:20
Просто отпад! :)
Voronblack
Уровень 17
19 августа 2014, 23:42
Если я правильно понял задание и правила, а так же в связи с отсутствием динамичных массивов (не коллекций), начудил следующее
public static int[] zerosIndexArray (int[] arr)
    {
        int count = 1;
        int[] temp = new int[1];
        int[] zerroarr = null;

        if(!(arr.length == 0))
        for(int i = 0; i < arr.length; i++ )
            if(arr[i] == 0)
            {

                temp[count-1] = i;
                zerroarr = new int[count];
                zerroarr = temp.clone();             
                count++;
                temp = Arrays.copyOf(zerroarr, zerroarr.length + 1);              
            }
            temp = null;

        return zerroarr;
    }
terranum
Уровень 28
20 августа 2014, 00:26
Слушай круто, мне очень нравиться! Красиво массив растет! :) Можно сделать пару улучшений, смотри, tmp.clone(); возвращает массив, так что zerroarr = new int[count]; можно убрать, тогда и int count = 1; удаляем, потом заменяем temp[count-1] = i; на temp[temp.length — 1] = i; и все. В правилах я добавил небольшую памятку — рекомендации по оформлению кода, методы и переменные принято оформлять в стиле camelCase, каждое следующее слово с большой буквы.
temp = Arrays.copyOf(zerroArr, zerroArr.length + 1) это реально круто! Не знал что забивает нулями то что выходит за длину массива. Беру себе на вооружение! :)
Voronblack
Уровень 17
20 августа 2014, 07:10
Спасибо, замечания постараюсь учесть.
Lars
Уровень 29
17 августа 2014, 23:27
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class Solution {

    public static void main(String args[]) throws IOException {

        System.out.println("Введите количество элементов массива: ");
        BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
        int kolEl=Integer.parseInt(reader.readLine());

        if (kolEl>0)
        {
          int arr[]=new int[kolEl];
          System.out.println("Введите элементы массива: ");
          for (int i=0;i<kolEl;i++)
          {
              arr[i]=Integer.parseInt(reader.readLine());
          }
          int arrNol[]=createArray(arr, kolEl);
        }
        else
        {
            System.out.println("Количество элементов меньше или равно 0");
        }

    }

    public static int[] createArray(int arr[], int kolEl)
    {

           int kol=0;
           for (int i=0;i<arr.length;i++)
           {
               if (arr[i]==0)
                   kol++;
           }
           if (kol>0)
           {
              int arrNol[]=new int [kol];
              int index=0;
              for (int i=0;i<arr.length;i++)
              {
                 if(arr[i]==0)
                 {
                     arrNol[index]=i;
                     index++;
                 }
              }
              System.out.print("Массив номеров нулевых элементов: ");
              for (int i=0;i<arrNol.length;i++)
              {
                  if (i==arrNol.length-1)
                      System.out.print(arrNol[i]);
                  else
                     System.out.print(arrNol[i]+" ");
              }

              return arrNol;
           }
           else
           {
               System.out.println("В массиве нет элементов равных 0");
               return null;
           }

    }
}


Чуток пе
terranum
Уровень 28
18 августа 2014, 22:44
Как мне кажется, можно урезать решение, и возвращать массив нулевой длинны не будет ошибкой. По логике мне все нравиться, сам решал как ты. Правда метод принимал только массив. Main можно урезать до:
int[] arr = {0, 5, 6, 7, 77, 54, 0, -25, 45, 88, 91, -100, 50, 0, 0};
zerosIndexesArr(arr); //чуток логики в имя метода
System.out.println(Arrays.toString(arr));

Arrays.toString(arr); — отличный метод который часто выручает!
Lars
Уровень 29
17 августа 2014, 23:02
public class Solution {

    public static void main(String args[]) throws IOException {

        System.out.println("Введите количество элементов массива: ");
        BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
        int kolEl=Integer.parseInt(reader.readLine());
        int arr[]=new int[kolEl];
        if (kolEl>0)
        {
          System.out.println("Введите элементы массива: ");
          for (int i=0;i<kolEl;i++)
          {
              arr[i]=Integer.parseInt(reader.readLine());
          }
          int arrNol[]=createArray(arr, kolEl);
        }
        else
        {
            System.out.println("Количество элементов меньше 0");
        }

    }

    public static int[] createArray(int arr[], int kolEl)
    {

           int kol=0;
           for (int i=0;i<arr.length;i++)
           {
               if (arr[i]==0)
                   kol++;
           }
           if (kol>0)
           {
              int arrNol[]=new int [kol];
              int index=0;
              for (int i=0;i<arr.length;i++)
              {
                 if(arr[i]==0)
                 {
                     arrNol[index]=i;
                     index++;
                 }
              }
              System.out.print("Массив номеров нулевых элементов: ");
              for (int i=0;i<arrNol.length;i++)
              {
                  if (i==arrNol.length-1)
                      System.out.print(arrNol[i]);
                  else
                     System.out.print(arrNol[i]+" ");
              }

              return arrNol;
           }
           else
           {
               System.out.println("В массиве нет элементов равных 0");
               return null;
           }

    }
}


Писал на «скорую руку», вроде бы все учел. Можно еще