Hi, ich habe ein Problem in einem Java-Programm. Ich habe mit einem Scanner Daten einlesen lassen (int- und String-Werte) und will diese jetzt irgendwo abspeichern, um dann alle aufzurufen, doch wie geht das? Ich dachte da an ein Array bzw. eine Array-Liste oder LinkedList, aber wie kann ich alle meine Werte irgendwo reinpacken und sie dann aufrufen? Wäre sehr dankbar
Zunächst mal kannst du nicht 2 verschiedene Datentypen in ein Array / Collection packen. Du müsstest dir eine eigene Klasse schreiben um jeweils ein int und ein String in einem Objekt zu bündeln und das Array / die Collection dann mit diesen Objekten füllen.
Ok, aber wie genau fülle ich denn die Daten? Sagen wir es wird "Internet" eingelesen. Wie soll ich diese Eingabe dann abspeichern? Ich kann mir nix darunter vorstellen
also entsprechen dann x und y im parameter von Wrapper dem scan.nextInt() und scan.nextLine()?
p.s. wie kann man in diesem forum so einen pseudocode schreiben?
und außerdem wäre da glaube ich das problem, dass mehrmals etwas eingelesen soll, also wie bei einem switch case, dass bspw. case 1 3x eintritt und dort dann verschiedene werte eingelesen werden und auch abgespeichert werden sollen. das würde ja dann mit der lösung, die du vorgeschlagen hast nicht funktionieren oder?
Das soll auch keine Lösung darstellen, sondern nur einen Weg aufzeigen, wie man 2 versch. Datentypen in einer Liste speichern kann. Du musst das ganze schon adaptieren
Immer wenn du einen int + String Wert eingelesen hast, musst du daraus ein entsprechendes Objekt machen und es der Liste hinzufügen.
Code kannst du via [code=Java]Your Code[/code] posten.
Ok, aber dann muss ich ja so viele Variablen erstellen, wie ich Daten einlesen will oder? Das sind nämlich echt viele Ich glaube bei der Menge ist das nicht möglich
publicvoidgibAus(){int auswahl = scan.nextInt();switch(auswahl){case1:System.out.println("lese einen int ein");
scan.nextInt();case2:System.out.println("lese einen String ein");
scan.nextLine();...}
die cases können sich hierbei wiederholen, weswegen dann sehr sehr viele variablen entstehen würden, die ich mit deinem ansatz erstellen müsste und das macht den code sehr unübersichtlich denke ich. also case 1 kann z.b. 4x eintreten und case 2 auch. das wären dann schon 8 variablen bei 2 cases und es gibt sehr viele
publicvoid blabla (){int zeugs = scan.nextInt();switch(zeugs){case1:System.out.println("irgendein int wert");
scan.nextInt();System.out.println("irgendein String");
scan.nextLine();System.out.println("irgendein int wert");
scan.nextInt();System.out.println("irgendein String");
scan.nextLine();break;case2:
das gleiche Spiel...case3:
das gleiche Spiel...}
Und diese eingelesenen Werte sind dann ja irgendwie im programm drin. Jetzt sollen alle diese Werte in eine Liste, damit ich sie später in einer Methode zusammen aufrufen kann. Ist das verständlicher?
Nein. Wenn man nicht weiß, wie der Code aussehen sollte, ist es selten hilfreich das Problem in Form von Code zu beschreiben.
Schreib doch einfach, was Du tatsächlich willst - ohne Code oder programmiersprachliche Konstrukte. Eine Beschreibung ohne "int" oder "String", kein switch, keine Schleifen, etc. Mach dazu ggf. ein paar Beispiele. Dann kennt sich vielleicht auch der Rest der Welt aus.
Du kannst Strings und int Werte in der selben ArrayList speichern. Hier ist ein Beispiel.
Java:
importjava.util.ArrayList;importjava.util.Scanner;publicclassEinlesen{publicstaticvoidmain(String[] args){Scanner scan =newScanner(System.in);ArrayList<Object> list =newArrayList<>();System.out.println("Gib 0 ein um die Eingabe zu beenden");int auswahl =1;while(auswahl >0){System.out.println("Gib 1 ein um einen int Wert einzulesen und 2 für einen String");
auswahl = scan.nextInt();switch(auswahl){case1:System.out.println("lese einen int ein");
list.add(scan.nextInt());break;case2:System.out.println("lese einen String ein");
list.add(scan.nextLine());break;}}for(Object o: list){if(o instanceofInteger){System.out.println("int "+ o);}else{System.out.println("String "+ o);}}}}
und zwei Klassen die von dieser Erben. Ich habe die mal IntValue und StringValue genannt.
Wie die aussehen kann man sich ja denken.
Da man um zwei verschiedene Datentypen in einer List speichern zu können eine Superklasse braucht, habe ich eine ArrayList aus Values erstellt.
Ansonsten ähnelt meine Mainklasse der von @DrZoidberg :
Java:
package string_int_einlesen;importjava.util.ArrayList;importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[] args){Scanner sc =newScanner(System.in);ArrayList<Value> values =newArrayList<>();for(int i =0; i <=3;i++){int value = sc.nextInt();switch(value){case1:System.out.println("String:");
values.add(newStringValue(sc.nextLine()));break;case2:System.out.println("Int");
values.add(newIntValue(sc.nextInt()));break;default:System.out.println("Ungültige Eingabe nur 1 und 2 sind erlaubt");}}
sc.close();for(Value v: values)
v.printValue();}}
Schreib doch einfach, was Du tatsächlich willst - ohne Code oder programmiersprachliche Konstrukte. Eine Beschreibung ohne "int" oder "String", kein switch, keine Schleifen, etc. Mach dazu ggf. ein paar Beispiele. Dann kennt sich vielleicht auch der Rest der Welt aus.