Java / Array unbekannter Größe einlesen

Registriert
19.01.07
Beiträge
116
Als Java-Anfänger experimentiere ich gerade mit Schleifen und Arrays herum.
Ich möchte einen Array einlesen, dessen Größe sich erst während der Eingabe ergibt.
Dazu überdimensioniere ich ihn und gebe in der Schleife, in welcher die Werte eingelesen werden eine Abbruchbedingung an.
Handelt es sich um int-Daten im Array, so funktioniert diese Vorgehensweise.
Der Versuch, die Schleife mit einem String-Wert vorzeitig zu beenden, schlägt jedoch fehl. Hier der Quellcode:
Code:
package Kontrollstrukturen;
import java.lang.*;
import java.io.*;
import java.util.*;
public class Array_mit_While_Schleife {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		String[] werte = new String [100];
		int i=0;
		int a;
		String eingabe;
		Scanner t = new Scanner(System.in);
		
		// Array einlesen
		
		while ( true)
		{
			System.out.print("Wort " + (i+1) +" eingeben / beenden mit 'ende'   ");
			eingabe  = t.next();
			if (eingabe == "ende")
				break;	
			werte[i] = eingabe;
			i = i+1;
		}
		
		// Array auslesen
		a=0;
		while (a<=i)
		{
			System.out.print(" Die "+ a +" Eingabe lautet: " + werte[a]);
			a =a+1;
		}
		
		
		
	}

}

Also, meine konkreten Fragen lauten folgendermaßen:

1. Wie beende ich die while-Schleife mit einem String if(eingabe=="ende")

2. Wie kann ich beim Auslesen eines Arrays eine senkrechte Liste erzeugen; bei meinen Versuchen mit (System.out.print("Die " + a +" Eingabe lautet: " + werte[a|;) steht alles horizontal in einer einzigen Zeile

Für alle Bemühungen zur Beantwortung meiner Fragen danke ich Euch im Voraus!!!
 

Trapper

Meraner
Registriert
12.05.05
Beiträge
231
1. Wie beende ich die while-Schleife mit einem String if(eingabe=="ende")
Code:
if (eingabe.equals("ende")) {}

2. Wie kann ich beim Auslesen eines Arrays eine senkrechte Liste erzeugen; bei meinen Versuchen mit (System.out.print("Die " + a +" Eingabe lautet: " + werte[a|;) steht alles horizontal in einer einzigen Zeile
Code:
System.out.print[B]ln[/B](...)

3. Dynamische Arrays mit Hilfe von "überdimensionierten" Arrays zu simulieren ist schlecht. Verwende lieber einen Vector oder eine ähnliche Datenstruktur.
 

Mighty-M@ck

Jonagold
Registriert
02.03.06
Beiträge
20
hi,

prinzipiell wuerde ich dir den einsatz von listen empfehlen. die sind handlicher wenn die laenge zu beginn noch nicht feststeht.

Code:
        List list = new ArrayList();
        list.add("Hello");
        list.add("world.");

        String[] array = (String[])list.toArray(new String[list.size()]);
eine andere moeglichkeit waere der einsatz der arrayutils von apache - http://jakarta.apache.org/commons/lang/api-release/index.html.

gruesse
 

Mighty-M@ck

Jonagold
Registriert
02.03.06
Beiträge
20
hier noch der code fuer die apache arrayutils:

Code:
        String[] array = new String[0];
        array = (String[]) ArrayUtils.add(array, "Hello");
        array = (String[]) ArrayUtils.add(array, "world.");
das array wird dann automatisch erweitert.
 

ChrisDD

Gloster
Registriert
21.02.04
Beiträge
64
1. Wie beende ich die while-Schleife mit einem String if(eingabe=="ende")

Ich würde auch anstelle von While-Do, bei der Eingabe, eher Do-While benutzen. Also aus:
Code:
[B]while[/B] ([B][COLOR="Red"]true[/COLOR][/B]) {
  [I]eingabe[/I] = ...
  [B]if[/B] ([I]eingabe[/I].[B]equals[/B]("ende")) { // Schleife abbrechen }
}

wird dann:

Code:
[B]do[/B] {
  [I]eingabe[/I] = ...
 } [B]while[/B] (![I]eingabe[/I].[B]equalsIgnoreCase[/B]("ende"));
 
Zuletzt bearbeitet:
Registriert
19.01.07
Beiträge
116
Herzlichen Dank für die umfassende Antwort!
Da Du ein Profi zu sein scheinst möchte ich Dich noch was anderes fragen:
Ich habe meine Programme bisher im Konsolenfenster von Eclipse ausgeführt.
Wie kann ich ein Java-Programm über das Terminal zum Laufen bringen?
 

Oxy

Antonowka
Registriert
15.03.07
Beiträge
363
Allgemein nette Ideen und alle auch richtig aber ich würde eine LinkedList nehmen , weil diese schneller ist .
Die LinkedList is nahezu gleich zu verwalten wie die ArrayList von daher ist es egal wo du dich durchquälst ich habe ein Bsp angehängt Musst in den Dateien nur das ".Txt" , mit ".Java" ersetzten und compilieren und austesten . ( und Alle die jetzt nicht glauben wollen das LinkedList schneller ist :) )
 

Anhänge

  • Arli.txt
    527 Bytes · Aufrufe: 496
  • Lili.txt
    646 Bytes · Aufrufe: 423
  • Main.txt
    265 Bytes · Aufrufe: 397

Oxy

Antonowka
Registriert
15.03.07
Beiträge
363
Herzlichen Dank für die umfassende Antwort!
Da Du ein Profi zu sein scheinst möchte ich Dich noch was anderes fragen:
Ich habe meine Programme bisher im Konsolenfenster von Eclipse ausgeführt.
Wie kann ich ein Java-Programm über das Terminal zum Laufen bringen?
Vergiss aber nicht vorher zu Compilieren javac -file danach java Klassename(name der MAIN klasse also wo die static drin ist)
 

Mighty-M@ck

Jonagold
Registriert
02.03.06
Beiträge
20
@oxy: danke fuer den tipp. werde beim naechsten mal die linkedlist anstelle der arraylist verwenden und mir das dann mal anschauen.
 

Trapper

Meraner
Registriert
12.05.05
Beiträge
231
LinkedLists erlauben im Gegensatz zur ArrayLists allerdings keinen wahlfreien Zugriff auf Elemente in konstanter Zeit. Wird dies aber nicht benötigt sind sie natürlich eine empfehlenswerte Datenstruktur.