Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/64: Рейтинг темы: голосов - 64, средняя оценка - 4.73
 Аватар для Slavik1985
0 / 0 / 1
Регистрация: 08.12.2015
Сообщений: 58

Создать массив из 12 случайных чисел таким образом, чтобы отрицательных и положительных было поровну

11.12.2015, 01:13. Показов 12527. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
не хватает терпения хочут увидеть другие решения...
Программа должна создать массив из 12 случайных целых чисел из отрезка [-10;10] таким образом, чтобы отрицательных и
положительных элементов там было поровну и не было нулей. При этом порядок следования элементов должен быть случаен
(т. е. не подходит вариант, когда в массиве постоянно выпадает сначала 6 положительных, а потом 6 отрицательных чисел
или же когда элементы постоянно чередуются через один и пр.). Вывести полученный массив на экран.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.12.2015, 01:13
Ответы с готовыми решениями:

Заполнить массив, чтобы в нем оказалось поровну отрицательных и положительных чисел
Доброго всем здравия, телесного и духовного. Два дня назад у кого-то было такое задание здесь или на С++. Найти не смог вот и создал тему...

Преобразовать массив таким образом, чтобы в нем не было повторяющихся чисел
Создать и заполнить случайными числами два целочисленных массива. Преобразовать эти массивы таким образом, чтобы в них не было...

создать стек в памяти из этих чисел таким образом, чтобы на вершине стека было самое большое число. Удалить из стека все отрицательные элементы.
Помогите решить. В файл записывается последовательность целых чисел. Прочитать последовательность из файла и создать стек в памяти из...

29
 Аватар для NullArray
3 / 3 / 4
Регистрация: 23.05.2015
Сообщений: 31
20.12.2015, 18:24
Студворк — интернет-сервис помощи студентам
Если без шавла... Просто сформируй массив а потом возьми 6 рандомных элементов и умножь на -1.
1
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
20.12.2015, 22:32
Slavik1985,
Цитата Сообщение от Slavik1985 Посмотреть сообщение
у меня такой вариант и не работает почему-то зараза
Я тоже новичок, поэтому всё дальнейшее только сугубое IMHO. Мне не понятно зачем столько генераторов случайных чисел? Не проще один с передаваемыми параметрами? Вместо:
Java
1
2
3
4
5
6
7
8
    static int rand1() {
        int c = (int) (Math.random() * 10 - 11);
        do {
            return c;
        } while (c != 0);
        // minus
        // return (int) (Math.random()*10-10);
    }
что-то вроде такого:
Java
1
2
3
    static int rand1(int i, int q) {
        return (int) (Math.random() * i + q);
    }
И уже сюда передавать, при вызове, любые i и q. Проверку на отсутствие нулей тоже лучше обойти (при i = 11, а q = 1 на выходе будут числа исключительно от 1 до 10 - проверьте)
Java
1
2
3
    static double r3() {
        return Math.random();
    }
А зачем double в целочисленной задаче, поясните?
В принципе ваш код что-то решает, но рандомные значения, особенно на небольшом диапазоне, имеют свойство повторяться. Так что постройте им проверку на уникальность и добейтесь чтобы их было ровно половина от заданного размера массива.
1
 Аватар для Slavik1985
0 / 0 / 1
Регистрация: 08.12.2015
Сообщений: 58
20.12.2015, 23:43  [ТС]
Цитата Сообщение от HOBATOP Посмотреть сообщение
Slavik1985,
Я тоже новичок, поэтому всё дальнейшее только сугубое IMHO. Мне не понятно зачем столько генераторов случайных чисел? Не проще один с передаваемыми параметрами? Вместо:
Java
1
2
3
4
5
6
7
8
    static int rand1() {
        int c = (int) (Math.random() * 10 - 11);
        do {
            return c;
        } while (c != 0);
        // minus
        // return (int) (Math.random()*10-10);
    }
что-то вроде такого:
Java
1
2
3
    static int rand1(int i, int q) {
        return (int) (Math.random() * i + q);
    }
И уже сюда передавать, при вызове, любые i и q. Проверку на отсутствие нулей тоже лучше обойти (при i = 11, а q = 1 на выходе будут числа исключительно от 1 до 10 - проверьте)
Java
1
2
3
    static double r3() {
        return Math.random();
    }
А зачем double в целочисленной задаче, поясните?
В принципе ваш код что-то решает, но рандомные значения, особенно на небольшом диапазоне, имеют свойство повторяться. Так что постройте им проверку на уникальность и добейтесь чтобы их было ровно половина от заданного размера массива.
Цитата Сообщение от HOBATOP Посмотреть сообщение
Java(TM) 2 Platform Standard Edition 5.0Выделить код
1
2
3
* * static double r3() {
* * * * return Math.random();
* * }
А зачем double в целочисленной задаче, поясните?
эт я думал через него пробовать смешать в случайный порядок те 12 чисел с которых 50на50(-/+) уже сделал

а за метод
Цитата Сообщение от HOBATOP Посмотреть сообщение
что-то вроде такого:
Java(TM) 2 Platform Standard Edition 5.0Выделить код
1
2
3
* * static int rand1(int i, int q) {
* * * * return (int) (Math.random() * i + q);
* * }
эт я вкурсе может и надо но суть не в этом ....
можна и так
Java
1
random()*(max(a,b)-min(a,b))+min(a,b)
конечно же c импортированным Math
0
 Аватар для Slavik1985
0 / 0 / 1
Регистрация: 08.12.2015
Сообщений: 58
24.12.2015, 13:26  [ТС]
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
60
61
62
63
64
65
import static java.lang.Math.*;
 
public class Vk1 {
 
    static int randM() {
        int c = (int) (random() * 10 - 11);
        do {
            return c;
        } while (c == 0);
// minus
        
    }
 
    static int randP() {
        int l = (int) (random() * (-10) + 11);
        do {
            return l;
        } while (l == 0);
    }
// plus
 
    static int[] randmas(int s) {
        int a[] = new int[s];
        int m = 0;
        int p = 0;
        for (int i = 0; i < a.length; i++) {
            if (p < 6 & random() <= .5 || m < 6) {
                a[i] = randP();
                p++;
            }
        }
        for (int i = 0; i < a.length; i++) {
            if (m < 6 & random() > .5 || p < 6) {
                a[i] = randM();
                m++;
            }
        }
        return a;
    }
 
    //
    // static int[] rt(int s) {
    // int m=0;
    // int p=0;
    // int a[] = new int[s];
    // for (int i = 0; i < s/2; i++) {if(p<3&m<3&randM()>0){a[i] =
    // (randM())*-1;++p;m--;}
    // else {a[i] =-1* (randM())*1;m++;p--;}}
    // //m=0;p=0;
    // for (int i = s/2; i < s; i++) {if(p<3&m<3&randP()>0){a[i] =
    // (randP())*-1;p++;m--;}
    // else {a[i] = (randP())*-1;m++;p--;}}
    // //for (int i = s/2; i < s; i++) {a[i] = rand2();}
    // return a;
    // }
 
    public static void main(String[] args) {
 
        System.out.println();
        int g[] = randmas(12);
        for (int i : g) {
            System.out.print(" " + i + " ");
        }
    }
}

Наконец-то хоть что-то а получилось у меня...
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
24.12.2015, 18:05
Цитата Сообщение от Slavik1985 Посмотреть сообщение
Наконец-то хоть что-то а получилось у меня...
Очень не хочется Вас расстраивать но... Вот самый первый запуск Вашего кода:
Java
1
-10  3  8  7  4  1  -3  2  -2  -6  6  -5
Отрицательных чисел только пять...
0
 Аватар для Slavik1985
0 / 0 / 1
Регистрация: 08.12.2015
Сообщений: 58
25.12.2015, 00:47  [ТС]
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
static int[] randmas(int s) {
        int a[] = new int[s];
        int m = 0;
        int p = 0;
        for (int i = 0; i < a.length; i++) {
            if (p < 6 & random() <= .5 || m < 6) {   
                a[i] = randP();
                p++;
            }
        }
        for (int i = 0; i < a.length; i++) {
            if (m < 6 & random() <= 1& random() >.5|| p < 6) {
                a[i] = randM();
                m++;
            }
        }
        return a;
    }
с небольшим изменением всё же чаще скидает нужный результат но увы не всегда пока нет новых идей у меня как поправить(
0
 Аватар для Slavik1985
0 / 0 / 1
Регистрация: 08.12.2015
Сообщений: 58
26.12.2015, 22:54  [ТС]
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
static int[] randmas(int s) {
        int a[] = new int[s];
        int m = 0;
        int p = 0;
        for (int i =  0; i <a.length; i++) {
            if (m < 6& random() <= 1& random() >.5|| p < 6) {
                a[i] = randM();
                m++;
            }else {a[i]=randP();p++;}
        }
        for (int i =  0; i <a.length; i++) {
            if (p < 6&random() < .5&random()>=0||m < 6) {   /*if (p < 6 & random() <= .5 || m < 6)*/
                a[i] = randP();
                p++;
            }else{a[i]=randM();m++;}
        }
        return a;
    }
Добавлено через 3 минуты
Цитата Сообщение от NullArray Посмотреть сообщение
Если без шавла... Просто сформируй массив а потом возьми 6 рандомных элементов и умножь на -1.
а можна краткий пример как рандомно изять 6 елементов которые умножатся на -1
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
28.12.2015, 00:32
Slavik1985, как я понимаю готовое решение Вас не устраивает (несколько раньше я выкладывал 100% работающий код) и вы упорно прошибаете стену самостоятельно... В целом похвально, но похоже зациклились на чём-то:
Java
1
if (m < 6& random() <= 1& random() >.5|| p < 6)
и потом опять:
Java
1
if (p < 6&random() < .5&random()>=0||m < 6)
- это для чего, я так и не понял. Каждый раз при вызове random() Вы получаете новое, непредсказуемое, значение. Зачем? Ну "программисту виднее", лады, проехали.
Вот взгляните на такую реализацию (именно умножением случайно выбранных элементов на минус единицу):
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
class Variation {
 
    private static int rnd(int n, int m) {
        return (int) (Math.random() * n + m);
    }
    
    private static int[] contains(int num) {
        int[] ret = new int[num];
        int[] tmp = minus(num);
        // заполним массив набором значений
        for (int i = 0; i < num; i++) {
            ret[i] = rnd(10, 1);
        }
        // и половину из них сучайным образом умножим на - 1
        for (int i = 0; i < num / 2; i++) {
            ret[tmp[i]] *= - 1;
        }
        return ret;
    }
    /* не знаю точно, но вроде это самый простой способ получить набор
    уникальных значений */
    private static int[] minus(int n) {
        int[] go = new int[n / 2];
        Set<Integer> minus = new HashSet<>();
        while (minus.size() < n / 2) {
            minus.add(rnd(n - 1, 0));
        }
        Object[] temp = minus.toArray();
        for (int i = 0; i < n / 2; i++) {
            go[i] = (int) temp[i];
        }
        return go;
    }
 
    public static void main(String[] args) {
        System.out.println(Arrays.toString(contains(18)));
    }
}
// сечас будет нечто вроде такого: [-5, 4, 4, 6, 4, -6, -4, -10, 9, 3, -7, -2, 1, -2, 9, -2, -8, 3]
В майне поменяйте чиселку на ту, которую желаете. Ежели чётное число - будет поровну положительных и отрицательных, при нечётных - положительных больше.
1
 Аватар для Slavik1985
0 / 0 / 1
Регистрация: 08.12.2015
Сообщений: 58
03.01.2016, 19:13  [ТС]
круто ...но я повторюсь что пока не слишком много знаю как вы уже и сами заметили... пока хожу на учусь на курсах где мы только дошли к enum'aм где как на зло тему эту открыл какой-то татарин что заменял моего препада (он опоздал - пришел к концу занятия). Он так быстро пробежался по этому что я еле уловил суть....
гдето в конце он чтото за зацыкливание класа на самого себя сказал и написал синтаксис в связке со сканнер
что-то типо того(не успел полностю записать):
Java
1
2
3
4
5
6
7
8
9
scanner =new Scanner(System.in);
        System.out.println("Print");
        if(scanner.hasNextInt()){int str=scanner.nextInt();
        System.out.println(str);}
        else{
            System.out.println("error");
            Main main = new Main();
            main=main.scanner;
            }
последния строка не знаю как правильно тепер надо искать в инете
Так что эти ваши: Set<Integer> minus... HashSet<>()...Коллекции, шафлы мне пока как зайцу стоп сигнал, не имею понятия что это такое... а так спасибо конечно
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
03.01.2016, 20:55
Slavik1985, Вы не поверите, но я даже не курсы не хожу - некогда, работа, быт... Так что в чистом виде - самоучка. По поводу последнего кода (нас могут за флуд взгреть: для нового вопроса логично создавать новую тему) могу предположить следующее:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Trend {
 
    public static void scaner() {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Print ");
        if (scanner.hasNextInt()) {
            int str = scanner.nextInt();
            System.out.println(str);
        } else {
            System.out.println("error");
            Trend.scaner();
        }
    }
 
    public static void main(String[] args) {
        scaner();
    }
}
на консоли будет что-то вроде вот этого:
Java
1
2
3
4
5
6
7
8
9
10
11
12
Print вызов метода самого собой
error
Print называется рекурсия
error
Print в данном случае рекурсивно вызывается метод scaner
error
Print до тех пор, пока не будет введено какое-нибудь число
error
Print например 23
error
Print 23
23

Для более углубённого понимания поиск по слову "рекурсия" вполне себе рулит. Удачи!

Добавлено через 39 минут
Slavik1985,
Цитата Сообщение от Slavik1985 Посмотреть сообщение
Так что эти ваши: Set<Integer> minus... HashSet<>()...Коллекции, шафлы мне пока как зайцу стоп сигнал
Мне же действительно показалось наиболее простым вариантом. Ну Ok вот реализация "без ничего" только if и for...
Кликните здесь для просмотра всего текста
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
import java.util.*;
 
public class Oferta {
 
    static int rnd(int n, int m) {
        return (int) (Math.random() * n + m);
    }
 
    static int[] negative(int size) {
        int[] minUs = new int[size / 2];
        minUs[0] = rnd(size, 0);
        for (int i = 0; i < minUs.length; i++) {
            int ver = rnd(size, 0);
            for (int j = 0; j < i; j++) {
                if (ver != minUs[j]) {
                    minUs[i] = ver;
                } else {
                    i--;
                    break;
                }
            }
        }
        return minUs;
    }
 
    static int[] randomArray(int size) {
        int[] array = new int[size];
        int[] negativeQuant = negative(size);
        for (int i = 0; i < array.length; i++) {
            array[i] = rnd(10, 1);
        }
        for (int i = 0; i < negativeQuant.length; i++) {
            array[negativeQuant[i]] *= - 1;
        }
        return array;
    }
 
    public static void main(String[] args) {
        System.out.println(Arrays.toString(randomArray(12)));
    }
}

Ни чего не комментировал, вроде бы не сложно разобраться.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.01.2016, 20:55

Создать static таким образом, чтобы его цвет был таким же, как у окна
Нужно создать метку таким образом чтобы цвет метки был таким же как у окна. HWND hLabelFrom = CreateWindow(&quot;STATIC&quot;,...

Одномерные массивы. Добавить столько элементов, чтобы положительных и отрицательных стало поровну
Задача почти решена. Но вот никак не понять, как вывести изменённый массив, то есть, как сделать, чтобы добавилось нужное количество...

Организовать одномерный массив из случайных положительных и отрицательных чисел
Буду очень признателен. Спасибо. Запрещено выкладывать задания в виде изображений текста. Одно задание - одна тема.

Преобразуйте файл таким образом, чтобы каждое предложение было в новой строке
2. Дан текстовый файл, содержащий не менее 3-х предложений. Преобразуйте его таким образом, чтобы каждое предложение было в новой строке и...

Преобразовать текст таким образом, чтобы в каждом абзаце было по три предложения
функция принимает строку, содержащую текст, и преобразует ее таким образом чтобы в каждом абзаце было по три предложения. функции:...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru