Der macht nicht 3 Mal sondern 4-6 Mal...

  • Antworten:4
  • Bentwortet
Daniel
  • Forum-Beiträge: 99

26.03.2014, 14:45:54 via Website

Moinsens,
es klingt logisch und sieht schön aus, aber der geht die Schleife nicht 3 Mal durch sondern viel öfter, manchmal auch wie gewollt 3 Mal. Mysteriös.
Hier ist der Code.
[code]
package com.example.meingame;

import java.util.Random;
import android.os.Bundle;
import android.os.Handler;
import android.widget.ImageButton;
import android.app.Activity;

public class MainActivity extends Activity{
public int[] stand = new int[30];
public static ImageButton dreieck;
public static ImageButton kreis;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dreieck = (ImageButton)findViewById(R.id.imageButton1);
kreis = (ImageButton)findViewById(R.id.imageButton2);
Random zufall = new Random();
final Handler handler = new Handler();
stand[0] = zufall.nextInt(2) + 1;
stand[1] = zufall.nextInt(2) + 1;
stand[2] = zufall.nextInt(2) + 1;
Thread thread = new Thread(){
public void run(){
for(int i = 0;i<3;i++){

switch(stand[i]){

case 1:

try {
handler.post(new Runnable(){
@Override
public void run() {
dreieck.setPressed(true);
}
});
Thread.sleep(3000);
handler.post(new Runnable(){
@Override
public void run() {
dreieck.setPressed(false);
}
});
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

case 2:

try {
handler.post(new Runnable(){
@Override
public void run() {
kreis.setPressed(true);
}
});
Thread.sleep(3000);
handler.post(new Runnable(){
@Override
public void run() {
kreis.setPressed(false);
}
});
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
}
};
thread.start();

}
}
[/code]

Antworten
Luigi
  • Forum-Beiträge: 2.282

26.03.2014, 15:19:29 via Website

Es wird nur dreimal durchlaufen, aber je nachdem ob case 1 oder 2 ist, werden 3-6 Aktionen ausgeführt. Wenn immer 1, dann 6 Aktionen. Wenn immer 2, dann 3 Aktionen. Ansonsten dazwischen.

Es fehlen die break-Anweisungen ;-)

— geändert am 26.03.2014, 15:21:26

Daniel

Antworten
Daniel
  • Forum-Beiträge: 99

26.03.2014, 15:28:12 via Website

stimmt :D dass ich sowas banales dummes obligatorisches einfach vergesse, und ich rätsel und rätsel schon seit tagen :grin::grin::grin:
aber wieso werden die dann mehrere male durchgenommen? Kannst du mir das mit den Aktionen nochmal erläutern? Weil ich versteh das so, wenn das Element 1 ist, wird case 1 ausgeführt, wrm jetzt 6 mal? ^^

Antworten
Luigi
  • Forum-Beiträge: 2.282

26.03.2014, 15:32:52 via Website

Daniel
Weil ich versteh das so, wenn das Element 1 ist, wird case 1 ausgeführt, wrm jetzt 6 mal? ^^

Wenn vorm case 2 kein break kommt, wird case 1 und danach gleich case 2 ausgeführt. case ist beim switch der Einsteigspunkt und break ein Endpunkt (im Endeffekt unabhängig vom case). Damit kann man dann die wildesten Abläufe basteln.

Mit 6 Mal meinte ich, wenn in allen drei Schleifen case 1 eintrifft, entsteht der Ablauf: case1, case2, case1, case2, case1, case2 (also sechs 'Aktionen')

— geändert am 26.03.2014, 15:39:58

Antworten
Daniel
  • Forum-Beiträge: 99

26.03.2014, 15:37:33 via Website

Achso, ich dachte mir, der guckt wirklich nur nach dem Wert, aber führt ohne dieses Satzbeendungszeichen break; einfach fort. Ok. habe es verstanden, Danke dir Luigi :D

Antworten