Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/26: Рейтинг темы: голосов - 26, средняя оценка - 4.96
69 / 69 / 39
Регистрация: 22.05.2014
Сообщений: 311

Генерация случайного массива

22.06.2014, 15:25. Показов 5320. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, выкладываю код(в нем же и задание с http://kostin.ws/java/java-arrays.html), требуется критика/предложения как можно сделать по другому

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/*Программа должна создать массив из 12 случайных целых чисел из отрезка [-10;10] таким образом,
чтобы отрицательных и положительных элементов там было поровну и не было нулей.
При этом порядок следования элементов должен быть случаен
(т. е. не подходит вариант, когда в массиве постоянно выпадает сначала 6 положительных,
а потом 6 отрицательных чисел или же когда элементы постоянно чередуются через один и пр.).
Вывести полученный массив на экран.*/
 
import java.util.Arrays;
import java.util.Random;
 
public class Test {
 
    public static int[] createRandomArray(int size, int negativeBound, int positiveBound) {
        if (size < 0 || size % 2 == 1 || negativeBound >= 0 || positiveBound <= 0)
            throw new IllegalArgumentException();
 
        int[] result = new int[size];
        int[] positive = new int[size / 2];
        int[] negative = new int[size / 2];
 
        Random random = new Random();
 
        //creating 6 positive and 6 negative numbers separately
        for (int i = 0; i < size / 2; i++) {
            positive[i] = random.nextInt(positiveBound) + 1;
            negative[i] = -(random.nextInt(-negativeBound) + 1);
        }
 
        System.out.println(Arrays.toString(positive));
        System.out.println(Arrays.toString(negative));
 
        //array that checks whether result[i] element is filled
        boolean[] filled = new boolean[size];
        for (int i = 0; i < filled.length; i++) {
            filled[i] = false;
        }
 
        int index = 0;
        while (index < size) {
            int getIndex = random.nextInt(size);
 
            if (filled[getIndex])
                continue;
 
            if (getIndex < size / 2)
                result[index++] = positive[getIndex];
            else
                result[index++] = negative[size - getIndex - 1];
 
            filled[getIndex] = true;
        }
        return result;
    }
 
    public static void main(String[] args) {
        int[] arr = createRandomArray(8, -10, 10);
        System.out.println(Arrays.toString(arr));
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.06.2014, 15:25
Ответы с готовыми решениями:

Генерация случайного ответа
Хочу сделать генератор случайных ответов, типо: да/нет. Являюсь начинающим в этом нелегком но интересном деле. Подскажите куда копать...

Генерация случайного числа
Добрый вечер, уважаемые форумчане. Подскажите, пожалуйста, правильно ли я понимаю конструкцию - ((int) (Math.random() * 100)) ...

Генерация случайного числа с исключением повторения
Всем привет. Есть задача, реализовать алгоритм для генерации 1 случайного числа, допустим, диапазон от 0 до 500, при этом, чтобы это...

8
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
22.06.2014, 19:03
EdisonMiranda, Зачем вам отдельные массивы для положительных и отрицательных?
Генерируйте сразу числа от -10 до +10 и кладите их в конечный массив.
0
69 / 69 / 39
Регистрация: 22.05.2014
Сообщений: 311
22.06.2014, 19:46  [ТС]
Цитата Сообщение от turbanoff Посмотреть сообщение
Зачем вам отдельные массивы для положительных и отрицательных?
Ну типа в задаче условие чтобы количество положительных чисел равнялось числу отрицательных
0
16 / 16 / 10
Регистрация: 17.03.2014
Сообщений: 59
22.06.2014, 21:07
Цитата Сообщение от EdisonMiranda Посмотреть сообщение
Ну типа в задаче условие чтобы количество положительных чисел равнялось числу отрицательных
Можно подсчитать при генерации отрицательные и положительные и если один из счётчиков перевалит за половину генерить числа другого типа.

Если размер массива будет 10000000000000 польза станет очевидной))
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
22.06.2014, 23:31
Цитата Сообщение от EdisonMiranda Посмотреть сообщение
не подходит вариант, когда в массиве постоянно выпадает сначала 6 положительных, а потом 6 отрицательных чисел или же когда элементы постоянно чередуются через один и пр.
Ну а взять и перемешать?
Вот с коллекциями, велосипед можно по аналогии сделать
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.*;
 
public class RandomOddEven {
    public static final int NUMBERS = 12;
    public static final int TOP = 10;
    
    public static void main(String[] args) {
        Random r = new Random();
        List<Integer> l = new ArrayList<>(NUMBERS); 
        for ( int i = 0; i < NUMBERS; ++i )
            l.add((r.nextInt(TOP) + 1) * ( ( i < NUMBERS / 2 ) ? -1 : 1 ));
        Collections.shuffle(l);
        
        System.out.println(l.toString());
    }
 
}
0
6 / 6 / 3
Регистрация: 09.03.2014
Сообщений: 23
23.06.2014, 00:03
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
public class RandomArray(){
public static int[] getRandomArray(){
int []arr = new int[12]; 
int index = 0; 
int countOfPlusElement = 0;
int countOfNegativeElement = 0;  
Random rand = new Random(); 
int tmp = rand.nextInt(10) - 10;
while(true){
     if(tmp == 0 && countOfPlusElement < 6 || countOfNegativeElement < 6 ){
            tmp = rand.nextInt(10) - 10; 
            continue;
}
     if(tmp > 0 && countOfPlusElement < 6){
          arr[index++] = tmp; 
           countOfPlusElement++;
          continue;
}
     if(tmp < 0 && countOfNegativeElement < 6){
         arr[index++] = tmp; 
         countOfNegativeElement++;
         continue; 
}
return arr; 
}
 
}
public static void main(String[] args){
    int[] arr = getRandomArray();
for(int i: arr) System.out.print(i); 
}
}
Не компилил и не запускал. Писал тут ... по этому могут быть мелкие ошибки но смысл понятен ..
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
23.06.2014, 00:34
Цитата Сообщение от EdisonMiranda Посмотреть сообщение
Ну типа в задаче условие чтобы количество положительных чисел равнялось числу отрицательных
И как из этого следует, что нужны отдельные массивы? Просто счётчика должно быть достаточно.
0
 Аватар для name?
201 / 172 / 52
Регистрация: 01.06.2010
Сообщений: 371
23.06.2014, 02:22
как вариант...
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
    public static int[] createRandomArray(int size, int start, int end) {
        int[] result = new int[size];
        Random random = new Random();
        int index = 0;
        int positiv = 0;
        int negative = 0;
        while (index < size) {
            int number = 0;
            if (positiv < size / 2 && negative < size / 2) {
                number = random.nextInt(end - start) + start;
            } else {
                if (negative < size / 2) {
                    number = -1 * random.nextInt(-1 * (start-1));
                }
                if (positiv < size / 2) {
                    number = random.nextInt(end);
                }
            }
            if (number != 0) {
                result[index] = number;
                if (number > 0) {
                    positiv++;
                }
                if (number < 0) {
                    negative++;
                }
                index++;
            }
        }
        return result;
    }
0
6 / 6 / 3
Регистрация: 09.03.2014
Сообщений: 23
23.06.2014, 11:13
Та же песня )) только у нас зашито что размер 12 ) по этому зачем париться ))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.06.2014, 11:13
Помогаю со студенческими работами здесь

Генерация случайного числа, которое делится на 7 в определенном диапазоне
Как генерировать случайное число, допустим в диапазоне , но такое, которое бы нацело делилось на 7?

Генерация случайного числа многомерного ассоциативного массива
Здравствуйте. Помогите пожалуйста. Необходимо вывести два случайных числа из многомерного ассоциативного массива. При этом массив может...

Генерация случайного числа, максимально случайного
Добрый день, задался вопросом как получить случайное число, но не псевдо-случайное по идее функции rand() и srand(time(NULL))...

Генерация случайного ID
Всем доброго времени суток. В общем вопрос такой как сгенерировать случайный ID . Вида 123456a,то есть шесть цифр и буква в конце.А после...

Генерация случайного числа
Проблемма такова: в программе необходимо получить несколько чисел, от 1 до 255 (или max будет другим -- пока не важно). Стандартные...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru