Random i do{}while. Odświeżanie

0

Witam wszystkich!

Jest to mój pierwszy post.

Mam pewien problem, wynika on zapewne z małego doświadczenia w programowaniu obiektowym (od niedawna próbuje tworzyć jakieś programy na android w Eclipse, wcześniej programowałem w Bascom dla mikroprocesorów).

Napisałem program który losuje liczbę z przedziału od 0 do 5 z wykorzystaniem Random. Następnie ustawiłem warunki:

if (losowana liczba==0){
// zmień grafikę dla ImageButton1
// Jeśli zostanie naciśnięty ten przycisk zrób{
//jakaś zmienna int++
//losuj liczbę (losowana liczba)
}
}
else if (losowana liczba==1){
.
.
.
itd. dla 6 możliwości.

Problem polega na tym że program zostaje w tym warunku dla którego była wylosowana liczba z pierwszego losowania. Po kliknięciu w przycisk zostaje wylosowana kolejna liczba jest też podnoszona wartość "jakiejś zmiennej", jednak program nie wykonuje poleceń z innego warunku. Próbowałem umieścić losowanie w pętli do while , jednak niczego to nie zmieniło.

Proszę o pomoc i wyjaśnienie dlaczego tak się dzieje.

1

Czemu losowania nie możesz dać poza warunki?
Nie wiem co chcesz zrobić ale zakładając, że ma CI losować po buttonie to powinno być jakoś tak, że akcja na buttonie wywołanie losowanie i tam odpowiednią reakcje na jego wynik.

button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt)
{
    // losowanie
   
   /// reakcja na wynik
}
};);
0

Założenie jest takie, że losowana jest liczba z w/w zakresu. Zmienia to obraz dla konkretnego przycisku, po naciśnięciu którego ponownie jest losowana liczba i znowu "aktywowany" któryś z przycisków. Dzieje się tak aż wartość "jakiejś zmiennej" nie osiągnie zamierzonej wartości.

1

No to ok, już jaśniej, w takim razie zrób osobną metodę która losuje i sprawdza wynik + zmienia obrazki na przyciskach i ich stan, a później do każdego przycisku dodaj actionListenera w którym masz wywołanie tej metody powiedzmy losuj(); Tak jak pokazałem to w poprzednim poście.

0

Próbowałem tak to zrobić. problem w tym ze zatrzymuje się to. Po naciśnięciu przycisku jest losowana kolejna liczba, ale nie jest aktualizowany stan przycisków. Nadal gdy naciskam ten przycisk wykonywane są polecenia.

0

no to zrobiłeś coś źle. Podaj kod z listenera, losowania i operacji na przyciskach.

0

Wieczorem wstawię cały kod z tej Class

0

Poprawiłem kod według Twoich wskazówek. Działa jak należy. Bardzo Ci dziękuję.

Mam jeszcze jedno pytanie. Kwestia ustawienia czasów. W poniższym kodzie punkty są dodawane tylko w trzech przypadkach (wlosowania==0,1,2), dla pozostałych trzech chciał bym aby były dodawane po upływie określonego czasu (najlepiej określonego w zmiennej). Również gdy przyciski (dla wlosowania==0,1,2) nie zostaną naciśnięte w odpowiednim czasie, była podnoszona wartość dla błędy.


import java.util.Random;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
import android.app.Activity;



public class Test extends Activity {

	String punkty , bledy;
	int iloscPunktow, iloscBledow,wlosowania, alosowania ;
	ImageButton p1,p2,p3;
	TextView dispPunkty, dispBledy;
	ImageButton disp3, disp1, disp2;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);
        
        p1 = (ImageButton) findViewById(R.id.ib1);
        p2 = (ImageButton) findViewById(R.id.ib2);
        p3 = (ImageButton) findViewById(R.id.ib3);
        dispBledy = (TextView) findViewById(R.id.bledy);
        dispPunkty = (TextView) findViewById(R.id.punkty);
        disp1 = (ImageButton) findViewById(R.id.ib1);
        disp2 = (ImageButton) findViewById(R.id.ib2);
        disp3 = (ImageButton) findViewById(R.id.ib3);
        
      
        
        p1.setOnClickListener(new View.OnClickListener() {   			
			public void onClick(View v) {	
			if (wlosowania==0){
				iloscPunktow++;
				dispPunkty.setText("Punkty: " + iloscPunktow );	
			}
			else{
				iloscBledow++;
				dispBledy.setText("Błędy: " + iloscBledow );
			}
				
			losowanie();
			ustawb();
			}  
        });
        p2.setOnClickListener(new View.OnClickListener() {   			
  			public void onClick(View v) {	
  			if (wlosowania==1){
  				iloscPunktow++;
  				dispPunkty.setText("Punkty: " + iloscPunktow );	
  			}
  			else{
  				iloscBledow++;
  				dispBledy.setText("Błędy: " + iloscBledow );
  			}
  				
  			losowanie();
  			ustawb();
  			}  
          });
        p3.setOnClickListener(new View.OnClickListener() {   			
  			public void onClick(View v) {	
  			if (wlosowania==2){
  				iloscPunktow++;
  				dispPunkty.setText("Punkty: " + iloscPunktow );	
  			}
  			else{
  				iloscBledow++;
  				dispBledy.setText("Błędy: " + iloscBledow );
  			}
  				
  			losowanie();
  			ustawb();
  			}  
          });
       
    }      
        
  
    public int losowanie(){
    	Random alosowania = new Random();
    	wlosowania = (alosowania.nextInt(6));
    	return wlosowania;
    }
    
    public void ustawb(){
    	if (wlosowania==0){
    		disp1.setImageResource(R.drawable.button_on2);
    		disp2.setImageResource(R.drawable.button_off);
    		disp3.setImageResource(R.drawable.button_off);
    	}
    	else if (wlosowania==1){
        	disp1.setImageResource(R.drawable.button_off);
        	disp2.setImageResource(R.drawable.button_on2);
        	disp3.setImageResource(R.drawable.button_off);
    	}
    	else if (wlosowania==2){
        	disp1.setImageResource(R.drawable.button_off);
        	disp2.setImageResource(R.drawable.button_off);
        	disp3.setImageResource(R.drawable.button_on2);
    	}
    	else if (wlosowania==3){
        	disp1.setImageResource(R.drawable.button_on1);
        	disp2.setImageResource(R.drawable.button_off);
        	disp3.setImageResource(R.drawable.button_off);
    	}
    	else if (wlosowania==4){
        	disp1.setImageResource(R.drawable.button_off);
        	disp2.setImageResource(R.drawable.button_on1);
        	disp3.setImageResource(R.drawable.button_off);
    	}
    	else {
        	disp1.setImageResource(R.drawable.button_off);
        	disp2.setImageResource(R.drawable.button_off);
        	disp3.setImageResource(R.drawable.button_on1);
    	}
    };  
}
1

Brzmi jak zadanie dla
http://developer.android.com/reference/android/os/CountDownTimer.html
albo
http://stackoverflow.com/questions/1877417/how-to-set-a-timer-in-android
albo
Tworzysz nowy wątek w którym sam organizujesz sobie pożądane zachowanie;]
PS. Dobrze wiedzieć, że o androida chodziło;]

0

Wszystko działa według moich założeń. Dzięki za pomoc. Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1