2012-06-26 6 views
0

방금 ​​Android를 배우기 시작했으며 오해가 있습니다. textView 및 단추를 표시하는 응용 프로그램을 만들려고합니다. 모든 버튼을 클릭하면 textView에 표시되어야하는 새로운 난수가 생성됩니다.Android : random 및 textView

하지만 불행히도 내 코드는 오류 목록을 발생시킵니다. 여기있다 :

public class FirstAndroidProjectActivity extends Activity { 

public OnClickListener listener = new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     TextView tv = (TextView) findViewById(R.id.display); 
     Random r = new Random(); 
     int i = r.nextInt(101); 
     tv.setText(i); 

    } 
}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Button button = (Button) findViewById(R.id.button); 
    button.setOnClickListener(listener);  
    } 
} 

난 그냥 무작위로 사용하고 의 제외한 일부 문자열을 사용하지 않는 경우 내가 (예를 tv.setText ("99")에 대한;) 모든 확인이지만, 변수를 setText()의 매개 변수로 사용할 수 없습니다.

어디에서 실수입니까?

귀하의 도움을 바랍니다.

답변

5

당신은

tv.setText(i +""); 
+0

모두에게 감사드립니다. – Dmitry

2

시도를보십시오 당신의 텍스트 뷰의 텍스트를 설정하기 전에 문자열에 임의의 숫자를 변환 할 필요가 : 내가 INT는

tv.setText(String.valueOf(i)); 
0

, TV를 봅니다. setText (""+ i);

0

정수를 String으로 변환 한 다음 textView로 설정하십시오. 당신은 또한 방법을 Random r = new Random(); 외부를 이동해야합니다, 그렇지 않으면 당신의 숫자가 정말 무작위로하지 않을 수 있습니다 : 문서에서

Random r = new Random(); 

@Override 
public void onClick(View v) { 
    TextView tv = (TextView) findViewById(R.id.display); 
    int i = r.nextInt(101); 
    tv.setText(Integer.toString(i)); 
} 

:

임의의 두 인스턴스가 같은 배정으로 생성되어있는 경우

하고, 동일한 일련의 메서드 호출이 생성되고 동일한 일련의 숫자가 생성되고 반환됩니다.

두 개의 Random 개체를 너무 빨리 만들면 (예 : 사용자가 두 번 버튼을 빠르게 누르면), 그들은 동일한 시드 (시스템 클럭이이를 생성하는 데 사용됩니다)를 공유하므로 동일한 수를 두 번 얻을 수 있습니다.

전역 변수에 하나의 Random 인스턴스 만 생성하면이 문제를 방지 할 수 있습니다.

0

사용

tv.setText(new Integer(i).toString()) ; 
1

자바는 자동 형식을 변환하지 않습니다. + 연산자는 하나 이상의 매개 변수가 String 인 경우 전달 된 매개 변수를 String으로 변환하기 위해 오버로드됩니다. 그래서 setText()에 문자열을 전달할 때 컴파일러는 int를 문자열을 기대하는 메서드에 전달하고 그 문자열을 사용할 수 없다는 것을 알게됩니다. 끝난.

+0

setText는 문자열과 함께 ints를 허용합니다. 문제는 정수를 setText에 전달하면 해당 값을 가진 리소스 ID를 찾으므로 컴파일러 대신 런타임에 크래시가 발생하는 것입니다. – dymmeh

+0

@dymmeh, 아주 좋은 지적입니다. Eclipse는 임의의 int가 유효한 리소스 ID인지 여부를 알 수 없으므로 분명히 설정할 수 있습니다.이것은 여러 서명의 함정입니다. 실수로 컴파일러에서 올바르게 보이는 부분을 전달할 수 있으며 런타임에 크래시가 발생합니다. –