Wert zu Array - Verständnisproblem?

Maddili

Mitglied
Hi ich habe ein String Array:

public static String[] options = {"a1", "a2", ....., "a70"}

jetzt möchte ich einen Wert hinzufügen - Aber wie?

ich habs so versucht:

options[options.length+1] = "M61_III_Std";

Aber da wirft es mir ein ExceptionOutofBounds raus.

Kann mir bitte schnell jemand helfen?

mfg
Maddin
 
Hallo,

ein Array in Java ist (wie in C / C++ und diversen anderen Sprachen) nicht vergrößer- oder verkleinerbar. Das heißt, die Größe ist fix und kann nicht verändert werden.
Um dieses Problem zu lösen gibt es zwei Möglichkeiten:

1 - Du erstellst ein neues String-Array mit der neuen Anzahl und kopierst die Elemente von dem einem Array in das neue.
2 - Du nutzt eine Liste (z.B. ArrayList, Vector) und nutzt die Methoden get(), add(), remove() usw.

Programmiert würde das so aussehen:
Java:
// Beispiel 1:
String[] alt = {"a", "b"};
String[] neu = new String[alt.length + 1];
System.arraycopy(alt, 0, neu, 0, alt.length);
neu[2] = "c";

// Beispiel 2:
ArrayList<String> test = new ArrayList<String>();
test.add("a");
test.add("b");
test.add("c");

Referenzen:
Vector
ArrayList<?>
Andere Erklärung des Problems

Gruß
BK
 
Zuletzt bearbeitet:
Das mit der Arraylist sieht gut aus. Aber:

1. ich habe ca. 70 Werte - Muss ich die alle einzeln adden?
2. Kann ichdie Arraylist wie ein normales Array verwenden, oder muss ich alles wieder umprogrammieren? Denn die Array Inhalte werde verschieden verwendet - u.a. habe ich CheckBoxes mit dem Namen cb_"Wert".

z.B.:

Java:
for (int i = 0; i < options.length; i++) {
String fieldName = "cb_" + options[i];

try {
JCheckBox c = (JCheckBox) Output.class.getDeclaredField(
	fieldName).get(null);

if (c.isSelected()){
//....
 
Hallo,

zu 1) Bei einer ArrayList und einem Vector ja. Kannst aber natürlich auch in einer Schleife machen, wenn sich der Text "berechnen" lässt.
zu 2) Das ist sehr umständlich gelöst. Schon ein JComboBox[] versucht? Dürfte so um einiges übersichtlicher und einfacher sein. Reflection ist zudem sehr langsam.

Gruß
BK
 
1. nein, der Text lässt sich nicht berechnen. Sind verschiedene Wert "a1...a70" war nur ein Beispiel.
2. Ich würde das gerne so belassen. Hat auch wunderbar funktioniert - eben bis ich einen neuen Wert hinzufügen musste (in meinem Fall, wenn eine bestimmte Checkbox angehakt wurde).

Wie kann ich analog zu
Java:
for (int i = 0; i < options.length; i++) {
String fieldName = "cb_" + options[i];

auf einzelne "Werte" der Arraylist zugreifen

Bzw. kann mir jemand helfen, wie ich diesen Code umschreiben muss..

danke
Maddin
 
Hallo,

falls deine ArrayList auch "options" heißt:
Java:
for (int i = 0; i < options.length(); i++) {
String fieldName = "cb_" + options.get(i);

Gruß
BK
 
Hi, ich muss den Thread nochmals pushen.

Habe nun folgendes Problem:

Bevor ich mein Array zu ner ArrayList gemacht habe, konnte ich eine *.txt Datei auslesen, und wenn ein bestimmter Wert drinstand, wurde die jeweilige Checkbox angehakt.
Leider funktioniert das jetzt (nach der Umwandlung in die ArrayList) nicht mehr.

Java:
public class LeseDatei {

		String option = 		";             Options:";
		//...

try
	{

		FileInputStream inputstream=new FileInputStream(DateiChooser.uebergabe);
		InputStreamReader reader=new InputStreamReader(inputstream);
		BufferedReader bff=new BufferedReader(reader);
		String line = bff.readLine();


		while (line!= null)
		{
			String vergleich = bff.readLine();

		
		//...

 if(vergleich.startsWith(option)) {
	 StringTokenizer st = new StringTokenizer(vergleich, " ");
		while (st.hasMoreTokens()) {
			String vergleich2 = st.nextToken();
			for(int x=0; x<schreibeDatei.options2.size(); x++){
				if(vergleich2.startsWith(schreibeDatei.options2.get(x))){
					String fieldName = "cb_"+schreibeDatei.options2.get(x);
					try {
			            		JCheckBox c = (JCheckBox) Output.class.getDeclaredField( fieldName).get(null);
			            			c.setSelected(true);
			            				
			            		} catch (Exception e) {
			            			System.out.println("lesedatei - options " + e);
			            			e.printStackTrace();
			            		}
							}
						}
				}
			}


} catch (Exception exp) {

		System.out.println("lesedatei - exp: " + exp);


	}
	}
}

Findet jemand den Fehler?

Ich bekomme auch immer eine "NullPointerException" (-> lesedatei - exp: java.lang.NullPointerException)
Wie kann ich herausfinden, WOHER die Exception kommt

mfg
Maddin
 
Zuletzt bearbeitet:
Ersetz mal
Java:
System.out.println("lesedatei - exp: " + exp);

durch

Java:
exp.printStackTrace();

Dann bekommst du auch die Zeilennummer. Oder verwende eine IDE, dann findest du die Stelle noch einfacher.
 
[Offtopic]
ein Array in Java ist (wie in C / C++ und diversen anderen Sprachen) nicht vergrößer- oder verkleinerbar.
*grinz* Hast dir die falschen Sprachen zum Vergleich ausgesucht ^^ In C ist es ohne Probleme möglich die Arraygröße zu ändern. Aber nichts desto trotz ist es in beiden Sprachen möglich außerhalb des Arraybereiches zu schreiben und zu lesen (was man aber nicht tun sollte, da man dadurch andere Werte aus Versehen überschreiben könnte und das Programm sich anders verhalten könnte, als geplant). Sowohl C als auch C++ kratzt es kein Stück, wie groß ein Array ist und deswegen prüfen beide Sprachen auch nicht nach, wenn ein Zugriff stattfindet ^^
[/Offtopic]
 
Zurück