Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
50 / 49 / 10
Регистрация: 27.05.2014
Сообщений: 232

Создать массив из номеров нулевых элементов

01.07.2015, 21:57. Показов 4022. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер уважаемые. Начал изучать java, решаю задачи по ней.
В общем есть такая задача: В целочисленной последовательности есть нулевые элементы. Создать массив из номеров этих элементов.
Я реализовал данным образом:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Task_2_array {
    public static void main(String[] args) {
        /**
         * Массив над которым будут проводиться вычисления
         */
        int[] arr = {2, 4, 0, 3, 3, 0, 0, 0, 9};
        calculate(arr);
    }
 
    private static int calculate(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == 0) {
                int result[] = {i};
            }
        }
        return 0;
    }
}
Однако чувствую, что обманываю по большому счету себя(в result[] попали не индексы массива, а переменная i из цикла). Вопрос, есть ли возможность из принятого массива(arr) вытащить сразу индексы для записи в result?
Прошу прощения за говнокод, если он таковым является.
Заранее спасибо.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.07.2015, 21:57
Ответы с готовыми решениями:

Создать массив из номеров нулевых элементов
Дан массив целых чисел A, среди которых есть нулевые элементы. Создать массив из номеров таких элементов. правильно ли я сделав задание? ...

Создать массив из номеров нулевых элементов
В целочисленной последовательности есть нулевые элементы. Создать массив из номеров этих элементов.

Создать массив из номеров нулевых элементов.
Ребят,помогите пожалуйста написать программы. 1 В целочислительной последовательности есть нулевые элементы.Создать массив из номеров...

9
:)
 Аватар для PlumBoom
134 / 134 / 31
Регистрация: 30.03.2013
Сообщений: 428
01.07.2015, 22:18
Сет, так подойдет?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.ArrayList;
 
public class App  {
    private static int[] getArray(int ... nums) {
        ArrayList<Integer> arrNums = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == 0) arrNums.add(i);
        }
 
        int arr[] = new int[arrNums.size()];
 
        for (int i = 0; i < arrNums.size(); i++) arr[i] = arrNums.get(i);
 
        return arr;
    }
 
    public static void main(String[] args) {
        int arr[] = getArray(1, 2, 0, 4, 0, 6, 5, 0, 6, 0);
 
        for (int anArr : arr) System.out.print(anArr + " ");
    }
}
1
50 / 49 / 10
Регистрация: 27.05.2014
Сообщений: 232
01.07.2015, 22:23  [ТС]
PlumBoom, думаю да, по крайней мере логичнее намного) Сейчас только разберусь до конца)
1
:)
 Аватар для PlumBoom
134 / 134 / 31
Регистрация: 30.03.2013
Сообщений: 428
01.07.2015, 22:45
Лучший ответ Сообщение было отмечено Сет как решение

Решение

Сет, я использовал аргумент разной длины, т. е. при вызове функции указываю "сколько захочу" аргументов, т.е. передаю числовую последовательность... В функции getArray создал динамический массив (ведь мы не знаем сколько у нас нулей может быть), потом циклом обработал числовую послед-ть (если нашли ноль, то добавляем в конец списка (динамического массива) соответствующий индекс)... Далее, создаем сам массив по заданию размером списка, добавляем в него элементы из списка и возвращаем массив. В главной фунции перебираем полученный массив

Сет, еще, как вариант, без создания статического массива (т.е. используем только динамический)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.ArrayList;
 
public class App  {
    private static ArrayList<Integer> getArray(int ... nums) {
        ArrayList<Integer> arrNums = new ArrayList<>();
 
        for (int i = 0; i < nums.length; i++)
            if (nums[i] == 0) arrNums.add(i);
 
        return arrNums;
    }
 
    public static void main(String[] args) {
        ArrayList<Integer> arr = getArray(1, 2, 0, 4, 0, 6, 5, 0, 6, 0);
 
        for (int anArr : arr) System.out.print(anArr + " ");
    }
}
0
50 / 49 / 10
Регистрация: 27.05.2014
Сообщений: 232
01.07.2015, 22:45  [ТС]
PlumBoom, да, я разобрался уже) Спасибо) Действительно, логичнее в разы, ну и удобнее с использованием динамического массива)
1
:)
 Аватар для PlumBoom
134 / 134 / 31
Регистрация: 30.03.2013
Сообщений: 428
01.07.2015, 23:06
Сет, и еще, если параметр не изменяем (нет присваиваний, только чтение) в методе, то лучше объявить его как final:
Java
1
private static ArrayList<Integer> getArray(final int ... nums) { /* ... */ }
Это придаст прирост к производительности выполнения


Сет, вот написал еще вариант, но без динамического массива Используя счетчик
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class App  {
    private static int[] getArray(final int ... nums) {
        int count = 0; // счетчик
 
        for (int num : nums) if (num == 0) count++; // считаем нули
 
        int arrNums[] = new int[count]; // создаем массив определенного размера
 
        count = -1;
 
        // заполняем массив
        for (int i = 0; i < nums.length; i++)
            if (nums[i] == 0) arrNums[++count] = i;
 
        return arrNums;
    }
 
    public static void main(String[] args) {
        int arr[] = getArray(1, 2, 0, 4, 0, 6, 5, 0, 6, 0);
 
        for (int anArr : arr) System.out.print(anArr + " ");
    }
}
1
2 / 2 / 1
Регистрация: 21.07.2015
Сообщений: 39
10.08.2015, 11:42
PlumBoom, Добрый день, недавно изучаю java. Реализовал таким образом.
LeanJava.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class LeanJava {
    public static void main(String[] args) throws Exception {
        try {
            BufferedReader buffRead = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("Введите длинну массива: ");
            int length = Integer.parseInt(buffRead.readLine());
            int[] arr = new int[length];
            for (int count = 0; count < length; count++){
                System.out.print("Введите " + (count+1) + "-й элемент массива: ");
                arr[count] = Integer.parseInt(buffRead.readLine());
            }
            System.out.println("Массив номеров нулевых элементов массива " + Arrays.toString(arr) +" равен "+ Arrays.toString(ZeroIndexesArr.getZeroIndexesArr(arr)));
        } catch (Exception e) {
            System.out.println("Введите положительную длинну массива!");
        }
    }
}


ZeroIndexesArr.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class ZeroIndexesArr {
    
    //метод возвращает массив, состоящий из индексов нулевых элементов arr[]
    public static int[] getZeroIndexesArr (int[] arr){
        if (arr.length==0)return null;
        int count = 0;
        for (int i = 0; i < arr.length; i++){
            if (arr[i]==0) count++;
        }
        int[] zeroIndexesArr = new int[count];
        count = 0;
        for (int i = 0; i < arr.length; i++) {
            if ( arr[i]==0 ){
                zeroIndexesArr[count] = i+1;
                count++;
            }
        }
        return zeroIndexesArr; 
    }
}

Хочу ввод массива запихнуть в отдельный метод, что бы метод main был как можно меньше:
т.к решаю много мелких задач, а уже решенные хочу сохранить в проекте - на одну задачку один новый класс. Подскажите как это реализовать?
0
Mobile Software Engineer
Эксперт С++
 Аватар для Ev[G]eN
5381 / 1585 / 956
Регистрация: 23.01.2011
Сообщений: 3,214
10.08.2015, 12:33
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
package ua.ev_g_en.cyberforum;
 
import java.io.IOException;
import java.util.Arrays;
import java.util.stream.IntStream;
 
public class Main {
    public static void main(String[] args) throws IOException {
        int[] array = { 1, 2, 4, 0, 5, 0, 4, 0, 2, 5, 0 };
        int[] result = IntStream.range(0, array.length).filter(index -> array[index] == 0).toArray();
        System.out.println(Arrays.toString(result));
    }
}
0
2 / 2 / 1
Регистрация: 21.07.2015
Сообщений: 39
10.08.2015, 12:57
Ev[G]eN, немного не это хочу. Создал два метода: в первом вводим длину массива и элементы, вызываем метод, который прогонит введенный массив и создаст массив с индексами нулевых элементов. Вот как последний вывести на экран?.

LeanJava
Java
1
2
3
4
5
public class LeanJava {
    public static void main(String[] args) throws Exception {
        ZeroIndexesArr.createArr();
    }
}
ZeroIndexesArr
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
public class ZeroIndexesArr {
    
    public static void createArr() throws Exception{
        String answer = null;
        BufferedReader buffRead = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Введите длинну массива: ");
        int length = Integer.parseInt(buffRead.readLine());
        final int[] arr = new int[length];
        for (int count = 0; count < length; count++){
            System.out.print("Введите " + (count+1) + "-й элемент массива: ");
            arr[count] = Integer.parseInt(buffRead.readLine());
        }
        System.out.println(Arrays.toString(arr));
        getZeroIndexesArr(arr);
        
        
    }
    
    //метод возвращает массив, состоящий из индексов нулевых элементов arr[]
    public static int[] getZeroIndexesArr (int[] arr){
        if (arr.length==0)return null;
        int count = 0;
        for (int i = 0; i < arr.length; i++){
            if (arr[i]==0) count++;
        }
        final int[] zeroIndexesArr = new int[count];
        count = 0;
        for (int i = 0; i < arr.length; i++) {
            if ( arr[i]==0 ){
                zeroIndexesArr[count] = i+1;
                count++;
            }
        }
        return zeroIndexesArr; 
    }
}
0
2 / 2 / 1
Регистрация: 21.07.2015
Сообщений: 39
12.08.2015, 11:33
Подскажите, можно ли правильнее/изящней/проще вывести массив номеров нулевых элементов? Главной задумкой было создать два метода: 1-й принимает массив с клавиатуры, 2-й на основе этого массива создает массив номеров нулевых элементов.
Java
1
2
3
4
5
6
7
public class LeanJava {
    public static void main(String[] args) throws Exception {
        ZeroIndexesArr z = new ZeroIndexesArr();
        System.out.println("Массив номеров нулевых элементов - " +
                Arrays.toString(z.getZeroIndexesArr(z.createArr())));
    }
}
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
public class ZeroIndexesArr {
    
    public static int[] createArr() throws Exception{
        BufferedReader buffRead = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Введите длинну массива: ");
        int length = Integer.parseInt(buffRead.readLine());
        final int[] arr = new int[length];
        for (int count = 0; count < length; count++){
            System.out.print("Введите " + (count+1) + "-й элемент массива: ");
            arr[count] = Integer.parseInt(buffRead.readLine());
        }
        return arr;
        
        
    }
    
    //метод возвращает массив, состоящий из индексов нулевых элементов arr[]
    public static int[] getZeroIndexesArr (int[] arr){
        if (arr.length==0)return null;
        int count = 0;
        for (int i = 0; i < arr.length; i++){
            if (arr[i]==0) count++;
        }
        final int[] zeroIndexesArr = new int[count];
        count = 0;
        for (int i = 0; i < arr.length; i++) {
            if ( arr[i]==0 ){
                zeroIndexesArr[count] = i+1;
                count++;
            }
        }
        return zeroIndexesArr; 
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.08.2015, 11:33
Помогаю со студенческими работами здесь

Создать массив из номеров нулевых элементов
в целочисленной последовательности есть нулевые элементы. создать массив из номеров этих элементов??

Создать массив из номеров нулевых элементов последовательности
В целочисленной последовательности есть нулевые элементы. Создать массив из номеров этих элементов. Плиз помогите решить , завтра...

Создать массив из номеров нулевых элементов исходного массива
В целочисленной последовательности есть нулевые элементы. Создать массив из номеров этих элементов. Плиз помогите решить , завтра сдавать...

Создать массив из номеров нулевых элементов исходного массива
Дан массив целых чисел, в котором есть нулевые элементы. Создать массив из номеров этих элементов.

Создать массив из номеров нулевых элементов в целочисленной последовательности (Borland C++)
В целочисленной последовательности есть нулевые элементы. Создать массив из номеров этих элементов.


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru