안녕하세요~ 초보 개발자 입니다~~
염치없지만 고수님들의 도움이 너무너무 필요해서 질문 드리려고요~~~
package lotto;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class lottoActivity extends Activity {
private int a,b,c,d,e,f = 0;
private TextView Lfirst[] = new TextView[6];
private Button btn = null;
private Random rand = new Random();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
for(int i = 0; i < 6; i++)
{
Lfirst[i] = (TextView)findViewById(R.id.first0+i);
}
btn = (Button)findViewById(R.id.click);
btn.setOnClickListener(click);
}
//객체 올리기
OnClickListener click = new OnClickListener(){
public void onClick(View v) {
if(v.getId()==R.id.click){
do{
//랜덤함수로 로또 숫자 출력. 0부터 시작하기 때문에 +1을 해줌
a = (int)(rand.nextInt(46))+1;
b = (int)(Math.random()*46)+1;
c = (int)(Math.random()*46)+1;
d = (int)(Math.random()*46)+1;
e = (int)(Math.random()*46)+1;
f = (int)(Math.random()*46)+1;
}while((a==b)||(a==c)||(a==d)||(a==e)||(a==f)||(b==c)||(b==d)||(b==e)||(b==f)||(c==d)||(c==e)|(c==f)||(d==e)||(d==f)||(e==f));
//어레이리스트로 정렬
ArrayList ar = new ArrayList();
ar.add(a);
ar.add(b);
ar.add(c);
ar.add(d);
ar.add(e);
ar.add(f);
//오름차순 정렬
Collections.sort(ar);
//뷰텍스트에 표시
for(int i = 0; i < 6; i++)
{
Lfirst[i].setText(""+ar.get(i));
}
}
}
};
}
위의 내용은 로또 숫자 6개를 출력하는 자바 소스 전체입니다.
중요한 부분은 랜덤함수로 로또 숫자 출력를 출력하는 부분인데요~ 문제는 효율적이지가 않은 것 같네요~반복 코딩도 많고요~
do~while 문을 쓰지 않고 for문을 사용해서 만들고 싶은데 잘 안되네요~
private Random rand = new Random();
private int[] lottoRand= new int[6];
for(int i=0; i<6; i++){
lottoRand[i] = (int)(rand.nextInt(46))+1;
}
이런식으로 만들려고 하는데 중복체크랑 숫자를 오름차순으로 정렬하는 부분이 안 풀리네요~ 고수님들의 도움이 절실합니다~ 꾸벅~
레이아웃은 xml로 빠르게 했어요~~xml코딩한 부분은 굳이 필요없을 것 같아서 올리지 않았어요ㅎㅎㅎ
혹시 xml도 필요하신 분들이 있다면 메일로 보내드릴게요~
6번만 돌려서 6개의 다른 값을 받아오는 것은 랜덤에서는 거진 불가능 하구요.
Set계열 객체를 이용해서 6개의 값이 될때까지 값을 생성하는 방법으로 하시면 쉽게 가능합니다.
Set계열 객체는 중복된 값이 들어가지 않기때문에 while문 조건으로 Set객체의 크기가 6개가 될때까지 계속해서 값을 뽑으면 됩니다.