Wpis z mikrobloga

#java #programowanie

Dobrze zamieniłem ify na switch casy? W komentarzu nowy kod.. (kompiluje się prawidłowo,ale nie jestem w stanie ocenić czy działa prawidłowo.

@Override
public void onSensorChanged(SensorEvent event) {
Sensor sensor = event.sensor;

if (sensor.getType() == Sensor.TYPEACCELEROMETER) {
akc
x.add(event.values[0]);
akcy.add(event.values[1]);
akc
z.add(event.values[2]);

} else if(sensor.getType() == Sensor.TYPEGYROSCOPE) {
gyro
x.add(event.values[0]);
gyroy.add(event.values[1]);
gyro
z.add(event.values[2]);

} else {
liniowyx.add(event.values[0]);
liniowy
y.add(event.values[1]);
liniowy_z.add(event.values[2]);
}

predictActivity();
}
  • 12
@Override
public void onSensorChanged(SensorEvent event) {
Sensor sensor = event.sensor;
switch (sensor.getType()){

case(Sensor.TYPEACCELEROMETER):

akc
x.add(event.values[0]);
akcy.add(event.values[1]);
akc
z.add(event.values[2]);

case(Sensor.TYPEGYROSCOPE):
gyro
x.add(event.values[0]);
gyroy.add(event.values[1]);
gyro
z.add(event.values[2]);

default:
liniowyx.add(event.values[0]);
liniowy
y.add(event.values[1]);
liniowy_z.add(event.values[2]);
}


predictActivity();
}
@RRybak: @Override
public void onSensorChanged(SensorEvent event) {
Sensor sensor = event.sensor;
switch (sensor.getType()){
case(Sensor.TYPEACCELEROMETER):{
akc
x.add(event.values[0]);
akcy.add(event.values[1]);
akc
z.add(event.values[2]);
break;
}


case(Sensor.TYPEGYROSCOPE): {
gyro
x.add(event.values[0]);
gyroy.add(event.values[1]);
gyro
z.add(event.values[2]);
break;
}
default:{
liniowyx.add(event.values[0]);
liniowy
y.add(event.values[1]);
liniowy_z.add(event.values[2]);
break;

}}

predictActivity();
}
@yras8: nie potrzebujesz klamr, klamer, klamrów - whatever; po prostu pamiętaj o tym, żeby przed każdym casem (i na koniec poprzedniego) dać break. Bo Ci poleci od pierwszego znalezionego case, aż w dół do klamry - łącznie z innymi case-ami. Albo do pierwszego znalezionego break właśnie
@RRybak: czekaj jak przed każdym? ja po prostu jestem nauczony,że daje się go w każdym casie na koniec,tak jak zrobiłem wyżej,tak jest okej czy nie?
@yras8: to było uproszczenie, na koniec każdego bloku, czyli przed każdym kolejnym - to to samo. Nie musisz go dawać po ostatnim, bo tam nie ma żadnego innego poniżej. Tak jak dałeś jest dobrze, ale klamry niepotrzebne (ale też nie są złe)
@yras8: jak nie dasz po każdym, to jeśli trafi na pierwszy przypadek to zacznie robić wszystkie dopóki nie trafi na break (zacznie pomijać to co ma w warunkach).
via Wykop Mobilny (Android)
  • 0
@yras8:

kompiluje się prawidłowo,ale nie jestem w stanie ocenić czy działa prawidłowo.

No to masz świetną okazję żeby zająć się testami jednostkowymi
@yras8: Są dwie szkoły: stara gdzie nie było obsługi klamr:

Sensor sensor = event.sensor;
switch (sensor.getType()){

case(Sensor.TYPE_ACCELEROMETER):
akc_x.add(event.values[0]);
break;
case(Sensor.TYPE_GYROSCOPE):
gyro_x.add(event.values[0]);
break;
default:
liniowy_x.add(event.values[0]);
}

notice "break" po każdym wyrażeniu. "break" jest konieczny, bo jest możliwe utworzenie kilku caseów, które wpadną w przypadek:

case(Sensor.TYPE_ACCELEROMETER):
case(Sensor.TYPE_GYROSCOPE):
gyro_x.add(event.values[0]);
break;
default:
liniowy_x.add(event.values[0]);
}

Zamiennie, możesz zastosować nawiasy klamrowe po case:

case(Sensor.TYPE_GYROSCOPE): {
gyro_x.add(event.values[0]);
}
default: {
liniowy_x.add(event.values[0]);
}