2016-10-10 2 views
0

내 변수가 0에서 6294 사이의 임의의 숫자 인 경우 어떻게하면 첫 번째 변수 만 출력 할 수 있습니까?숫자의 첫 자리 숫자 만 지우는 방법

임의의 숫자에 대한 나의 코드는

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

예는 3542을 뱉어 경우, 나는 그것이 내가하지 오전 8 말하고 싶은, 그것은 865을 뱉어 경우 그냥 3을 말하고 싶은입니다 Java에 익숙하지만, 줄 간격과 관련이 있다고 생각했습니다. % d, % f, % s 명령과 관련이 있습니까? 어떤 통찰력이라도 대단히 감사 할 것입니다.

수정 ** 교수가 발표 한 학습 가이드의 일부가 아닙니다. 그것이 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; 
} 

몇 가지 기본적인 수학을 할 수 있습니다. 숫자의 밑줄에있는 로그는 숫자에있는 숫자의 수를 제공합니다.

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

단지 1과 9 사이의 임의의 숫자를 던져 쉽게 할 수 있지만, 확률 분포 원 : 숫자 뺀 수의 힘으로 10 수를 나누면 왼쪽에 소수점을 이동 숫자의 첫 번째 숫자를 취하는 것과 동일하지 않습니다. 이것은 Benford's law입니다.

0

왜 모든 우회로를하고 있습니까? 왜 4 자리 숫자를 만들고 싶습니까? 처음 만 신경 쓸 때?!

본질적으로 0과 6 사이의 임의의 숫자를 묻습니다. (또는 865에서 8을 사용한다는 아이디어에 따라, 0과 9).

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

힌트 :

는 것처럼, 다음 Random.nextInt() 갈 JimmyB가 제대로 여기에서 지적 된 바와 같이 : 여기서 무엇을하고 있는지 값의 분포에 영향을 미칠 것이다. 다른 한편으로는 : 을 입력하면 예제 입력을 넣었습니까?절단 단지 작은 임의의 숫자를 생성하지 않는 좋은 이유는 (다른 제안으로) 거기 가정 대신에 당신이 필요로하는 것만을 생성 절단의

+0

결과는 OP의 버전과 다른 분포를 가지고 있습니다 ... – JimmyB

+1

아마. 문제는 그것이 정말로 중요합니까? 그리고 그런 "nextInt()"솔루션의 배포를 이해하는 것이 더 쉽지 않을까요? 3 또는 4 자리 문자열의 "첫 번째 문자"를 가져 오는 것과 비교하면?! – GhostCat

+0

나는 OP가이 배포판을 목적에 맞게 선택하여 특정 배포를 달성했다고 가정하고 있습니다. 따라서 출력 루틴을 단순화하기 위해 다른 배포판을 사용하라는 말은별로 사용하지 않습니다. – JimmyB

0

... 0 타협의 int 9

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

결과는 OP의 버전과 다른 분포를 가지고 있습니다 ... – JimmyB

+0

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

관련 문제