Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo zusammen,
wenn ich in einer switch-case anwendung im case 1 eine arraylist erzeuge und mit objekten fülle,
wie kann ich diese dann in case 2 aufrufen? geht das überhaupt?
Oder muss ich den Konstruktor außerhalb aufrufen?
dein name alleine schon... du hast von grund auf eine negative einstellung zum thema und willst es wohl gar nicht verstehen!
jetzt mal private, public aussen vorgelassen...irgendwie ist es ganz einfach, wenn ich eine variable definiere, ist sie nach aussen nicht sichtbar, nach innen schon....
wenn ich eine object variable definiere, ist in einer methode sichtbar,
wenn ich eine variable in einer methode definiere, ist sie weiter innen, in einer schleife, swtich block sichtbar, in einer anderen methode aber nicht...
wenn ich eine nariable in einem zb if block definiere, ist sie in der selben methode ausserhalb des blockes nicht sichtbar...
also definierst du die variable einfach nicht in deinem switch block, sondern machst eine objektvarialbe....
Code:
package test;
import java.util.Scanner;
public class Test {
Scanner s = new Scanner(System.in);
String wert = "";
public static void main(String[] args) {
Test t = new Test();
for(int i = 0; i <10; i++){
t.eingabe();
t.ausgabe();
}
}
private void ausgabe() {
System.out.println("wert ist: "+wert);
}
public void eingabe(){
System.out.println("Zahl eingeben");
int i = s.nextInt();
switch (i) {
case 1:
wert = "eins";
break;
case 2:
wert = "zwei";
break;
case 3:
wert = "drei";
break;
case 4:
wert = "vier";
break;
default:
wert = "nix";
break;
}
}
}
selbstverständlich nicht, was soll das denn auch für einen sinn machen. swich ist doch ein langes entweder oder. Was du im ersten case initialisiert hast, wird im zweiten nie gebraucht, weil ja das erste case eingetreten ist...
Äääh, ARadauer, könntest du mal sagen was dieses komische beispiel da sollte?
ja danke, dass es so geht wusste ich auch.
ich dachte nur, dass es evtl. auch einen anderen Weg gibt in case 2 das in case 1 erstellte Objekt aufzurufen, da ich mir dadurch erheblich arbeit gespart hätte...
public class Test {
int z = 8;
public static void main(String[] args) {
Test t = new Test();
t.doSomething();
}
private void doSomething() {
int x = 5;
System.out.println(z); //ist hier natürlich sichtbar
if(true){
int y = 6;
System.out.println(x); //klar ist x hier sichtbar
System.out.println(z); //ist hier natürlich sichtbar
}
// System.out.println(y); // y kann hier nicht sichtbar sein.. fehler
doSomethingOther();
}
private void doSomethingOther() {
// System.out.println(x); // natürlich nicht sichtbar
int x = 99;
System.out.println(x); //jetzt schon, das ist aber ein anderes x als das von doSomething
System.out.println(z); //ist sichtbar
int z = 33; //das ist jetzt eine lokale variable und hat nichts mehr mit dem des objekts zu tun
printTheZ(); //das wird die 8 ausgeben
System.out.println(z); //das die 33
}
private void printTheZ() {
System.out.println(z);
}
}
selbstverständlich nicht, was soll das denn auch für einen sinn machen. swich ist doch ein langes entweder oder. Was du im ersten case initialisiert hast, wird im zweiten nie gebraucht, weil ja das erste case eingetreten ist...
Äääh, ARadauer, könntest du mal sagen was dieses komische beispiel da sollte?
´hab mir gedacht, dass er sicher irgendwein auswahl menu mit switch case hat und jetzt zb in der zweiten auswahl das in der ersten erstellte objekt anzeigen möchte...
Von "jedem" swich-case habe ich nichts gesagt. Aber sowas wie:
Code:
swich(option){
case 1:{
//5 Zeilen
}break;
case 2:{
//35 Zeilen
}break;
case 3:{
//170 Zeilen
}break;
case 4:{
//23 Zeilen
}break;
case 5:{
//9 Zeilen
}break;
case 6:{
//19 Zeilen
}break;
kann in der anfangsphase schnell hingeschmiert werden, wenn man nicht dasselbe mit Interfaces erledigen will, und das resultiert dann im totalen chaos...
selbstverständlich nicht, was soll das denn auch für einen sinn machen. swich ist doch ein langes entweder oder. Was du im ersten case initialisiert hast, wird im zweiten nie gebraucht, weil ja das erste case eingetreten ist...
Stimmt natürlich. Aber trotzdem macht das, was der OP vorhatte, immer noch keinen Sinn.
Also, gegen breaks hast du also was, bei diesem case-fall-through meinst du dennoch nicht, dass das ein kleines schmutziges Geheimnis wäre, das vergessen werden sollte?
seltsam seltsam...
Stimmt natürlich. Aber trotzdem macht das, was der OP vorhatte, immer noch keinen Sinn.
Also, gegen breaks hast du also was, bei diesem case-fall-through meinst du dennoch nicht, dass das ein kleines schmutziges Geheimnis wäre, das vergessen werden sollte?
seltsam seltsam...
Jein, in "gewissen" Fällen kann das Sinnvoll sein!
Code:
Object foo = new ObjectInstance1();
switch (bar) {
case 1:
foo.methode1();
break;
case 2:
foo.specialValueForMethode2(12345);
case 3:
foo.methode2();
break;
case 4:
case 5:
case 6:
foo.methode3();
}
Nämlich wenn ich in einem GAAAAAANZ bestimmten Fall eine Vorinitialisierung vornehmen möchte aber den Code dahinter auch ausführen will oder ich auf mehrere Werte die selben Aktionen folgen lassen möchte.
Gerade im letzteren Fall finde ich die switch/case Lösung besser als folgender Code:
Also, gegen breaks hast du also was, bei diesem case-fall-through meinst du dennoch nicht, dass das ein kleines schmutziges Geheimnis wäre, das vergessen werden sollte?
seltsam seltsam...
Seltsam ist eher diese Kuriosität:
Hier waren schon mindestens 2 C#ler unterwegs die versucht haben es mir als Vorteil von C# zu verkaufen das C# ein break im case erzwingt.
Damit das es kein fall through in C# gibt, könnte ich persönlich noch leben, aber keiner der beiden Kandidaten konnte einen validen Grund nennen warum man das break nicht einfach weglassen kann, wenn es sowieso implizit vorhanden ist.
Das stimmt auch, die Frage ist ob es immer Sinn macht.
Aber in 90%* der Fälle macht es Sinn.
Gilt übrigens auch für die meisten if-else Statements, die keine primitiven Abfragen
machen -> equals auf irgendwelche Dinge
*Ich hab mir erlaubt nach der komplexen Rechnung von 89,950234 auf 90 aufzurunden.
aber keiner der beiden Kandidaten konnte einen validen Grund nennen warum man das break nicht einfach weglassen kann, wenn es sowieso implizit vorhanden ist.