2016-10-10 5 views
0

Если моя переменная является случайным числом от 0 до 6294, как бы я получил свой вывод, чтобы ТОЛЬКО распечатать первую переменную?Как «стереть» цифры, чтобы иметь только первую цифру числа

Мой код для случайного числа является

int random = (int)(Math.random() * 6294); 

Например, если он выплевывает 3542, я хочу, чтобы просто сказать 3. Если он выплевывает 865, я хочу сказать 8. Я не знакомы с Java, но я думал, что это имеет какое-то отношение к межстрочному интервалу? Что-то делать с командами% d,% f,% s? Я не уверен, что любое понимание будет оценено по достоинству!

EDIT ** Отсутствие его части учебного пособия, которое мой профессор выпустил. Вот почему его число между 0-6294. Я просто не знаю, как это понять, если число меняется.

+4

Если вам нужна только одна цифра, почему вы рандомизировали многозначные числа? – Berger

+0

Это предполагает, что OP не нуждается в числе отверстий, однако, возможно, ему нужен 1 знак для этого конкретного выхода, но он все еще используется для всего числа позже в коде. – Athamas

+0

@Athamas. Учитывая его пример, он немедленно удаляет это случайное число. Он забывает о других цифрах! – GhostCat

ответ

0

Предполагая, что есть хорошая причина для усечения и не только генерируют меньшую случайное число (как другие предложили) , вы можете разобрать Int в строку и получить первый символ/цифру со следующим:

//get random number 
int random = (int)(Math.random() * 6294); 

//print out just the first digit 
System.out.println(String.valueOf(random).charAt(0)); 

То же ответ Мена, но с charAt(0) вместо substring(0,1)

2

Я думаю, что самым простым решением является обработка числа как String и получение только первого символа.

Затем вы можете безопасно преобразовать его обратно в число.

Например

// assuming the output 
int random = 3542; 
// getting 1st character only 
String truncated = String.valueOf(random).substring(0,1); 
// parsing new int 
int newRandom = Integer.parseInt(truncated); // ==> 3 

Примечание

Если вы хотите только первая цифра, скорее всего, вы не должны рандомизации так, как вы в настоящее время сделать.

+0

преобразование в, а затем из строки кажется не слишком эффективным –

+0

@ P.J.Meisch, вероятно, лучше, чем математика. – Mena

1

Как сказал @Berger, было бы проще просто генерировать случайное число между 1 и 10:

Random r = new Random(); 
int random = r.nextInt(10) + 1 
1

Есть много способов сделать это. Тот, который мне нравится, разделив число тех пор, пока число больше 9:

int first_digit(int n) { 
    while (Math.abs(n) > 9) { 
    n /= 10; 
    } 
    return n; 
} 

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

int first_digit_v2(int x) { 
    return x/(int)Math.pow(10, (int)Math.log10(x)); 
} 

Это может быть проще просто бросить случайное число в диапазоне от 1 до 9, но распределение вероятностей вон 't то же самое, что и первая цифра числа. Это из-за Benford's law.

0

Почему все обходные пути? Почему вы хотите создать 4-значное число; когда вы только заботитесь о первом ?!

Вы видите, в сущности, запрашивают случайное число от 0 до 6. (или, следуя идее использования 8 из 865; 0 и 9).

Просто пойти на Random.nextInt() тогда, как:

int randomValueBetween0And9 = new Random().nextInt(7); 

Подсказка: в JimmyB правильно указав здесь: то, что вы делаете здесь, будет влиять на распределение значений. С другой стороны: вы подумывали о распределении , когда вы собрали свой пример ввода?

+0

Результат отличается от версии OP ... – JimmyB

+1

Возможно. Вопрос: действительно ли это имеет значение? И не было бы легче ** понять распределение такого «nextInt()» решения; по сравнению с выборкой «первого символа» из 3 или 4 цифр строки ?! – GhostCat

+0

Я полагаю, что ОП выбрал эту схему генерации чисел с целью достижения * определенного распределения. Следовательно, не так много пользы, говоря ему просто использовать другое распространение, чтобы упростить процедуру вывода ... – JimmyB

0

вместо усечения генерировать только то, что вам нужно ... ИНТ betwen 0 и 9

int random = (int)(Math.random() * 10); 
+0

Результат имеет разное распределение, чем версия OP ... – JimmyB

+0

https://en.wikipedia.org/wiki/Benford % 27s_law – vz0

Смежные вопросы