Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2014, 15:20   #1
Taner
Пользователь
 
Регистрация: 05.04.2014
Сообщений: 54
По умолчанию Рандом

Начал занимать по книжкам, сайтам Java. Возникли трудности с рандомом. В программе я создаю массив из 10 чисел и хочу его заполнить случайными числа от 0 до 10000, с помощью метода Math.random(), а затем просто считаю сколько чисел было больше 5000, сколько меньше. Так вот почему-то всегда первые 5 чисел - нули.
Код:
arr[i] = (int)(Math.random()*10000);
Код:
package Hello;

import java.lang.*;
import java.util.Arrays;

public class HelloWorld {
    public static int cMax = 0;
    public static int cMin = 0;
    public static void main(String[] args) {
        int[] arr = new int[10];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int)(Math.random()*10000);
            if (arr[i] > 5000) HelloWorld.cMax = cMax + 1;
            else HelloWorld.cMin = cMin + 1;
            Arrays.sort(arr);
            System.out.print(arr[i] + " ");
        }
        System.out.println();
        System.out.println("меньше 5000 = " + cMin);
        System.out.println("больше 5000 = " + cMax);
    }
}
Taner вне форума Ответить с цитированием
Старый 15.12.2014, 15:27   #2
Taner
Пользователь
 
Регистрация: 05.04.2014
Сообщений: 54
По умолчанию

К стати если воспользоваться new Random(), такая же ситуация
Код:
public static Random r = new Random();

public static void main(String[] args) {
...
      arr[i] = r.nextInt(10000);
...
}
Выводит что-то вроде этого
0 0 0 0 0 4183 6334 7162 7162 7162
меньше 5000 = 3
больше 5000 = 7
Taner вне форума Ответить с цитированием
Старый 15.12.2014, 16:09   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Taner, было ошибкой сортировать массив во время того, как он ещё не заполнен!

пробуйте:
Код:
public class HelloWorld {
    public static int cMax = 0;
    public static int cMin = 0;
    public static Random r = new Random();

    public static void main(String[] args) {
        int[] arr = new int[10];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = r.nextInt(10000);
            if (arr[i] > 5000) HelloWorld.cMax = cMax + 1;
            else HelloWorld.cMin = cMin + 1;
            System.out.print(arr[i] + " ");
        }
        // Arrays.sort(arr);
        System.out.println();
        System.out.println("меньше 5000 = " + cMin);
        System.out.println("больше 5000 = " + cMax);
    }
}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.12.2014, 16:09   #4
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

В общих чертах все верно, сделал свой вариант
Код:
package ru.bugrimov;

public class Main {
    public static final int N = 10;
    public static final int CH = 5000;

    public static void main(String ... args) {
        int [] arr = new int[N];

        initArray(arr);
        printArray(arr);

        System.out.println("\nБольше 5000: " + elemMax(arr));
        System.out.println("\nМеньше 5000: " + elemMin(arr));
    }

    // Вывод массива на экран
    public static void printArray(int arr[]) {
        for (int anArr : arr) {
            System.out.print("[" + anArr + "]");
        }
        System.out.println();
    }

    // Инициализация массива
    public static void initArray(int arr[]) {
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int)(Math.random() * 10000);
        }
    }

    // Больше 5000
    public static int elemMax(int arr[]) {
        int count = 0;
        for (int anArr : arr) {
            if (anArr > CH) {
                count++;
            }
        }
        return count;
    }

    // Меньше 5000
    public static int elemMin(int arr[]) {
        int count = 0;
        for (int anArr : arr) {
            if (anArr < CH) {
                count++;
            }
        }
        return count;
    }
}
Снимок.PNG

Serge_Bliznykov с языка сорвал Причем эта сортировка идет при каждой итерации цикла. Мне еще кажется, что обращение к статическим переменных cMax и cMin можно делать без указания класса...
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Bugrimov; 15.12.2014 в 16:14.
Bugrimov вне форума Ответить с цитированием
Старый 15.12.2014, 16:17   #5
Taner
Пользователь
 
Регистрация: 05.04.2014
Сообщений: 54
По умолчанию

Все понятно, спасибо, а я зациклился на том, что у меня что-то с рандомом не правильно и поэтому такие результаты, а такую ошибку даже и не заметил
Taner вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
РАНДОМ kilogram PHP 3 12.05.2012 14:24
рандом ZoomHz Общие вопросы C/C++ 1 10.07.2011 20:22
Рандом Ya_Aston Помощь студентам 4 17.12.2010 22:43
Рандом Syltan JavaScript, Ajax 0 07.05.2010 01:40
рандом Arcueid1691 Общие вопросы C/C++ 7 18.06.2009 00:58