1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Java / Array unbekannter Größe einlesen

Dieses Thema im Forum "PHP & Co." wurde erstellt von Aaron_Horowitz, 20.03.07.

  1. Aaron_Horowitz

    Dabei seit:
    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!!!
     
  2. Trapper

    Trapper Boskop

    Dabei seit:
    12.05.05
    Beiträge:
    213
    Code:
    if (eingabe.equals("ende")) {}
    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.
     
  3. Mighty-M@ck

    Mighty-M@ck Jonagold

    Dabei seit:
    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
     
  4. Mighty-M@ck

    Mighty-M@ck Jonagold

    Dabei seit:
    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.
     
  5. ChrisDD

    ChrisDD Gloster

    Dabei seit:
    21.02.04
    Beiträge:
    64
    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"));
    
     
    #5 ChrisDD, 20.03.07
    Zuletzt bearbeitet: 22.03.07
  6. Aaron_Horowitz

    Dabei seit:
    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?
     
  7. FireballBK

    FireballBK Boskoop

    Dabei seit:
    14.10.06
    Beiträge:
    40
    Normal sollte ein java KLASSENNAME reichen
     
  8. Oxy

    Oxy Antonowka

    Dabei seit:
    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
      Dateigröße:
      527 Bytes
      Aufrufe:
      458
    • Lili.txt
      Dateigröße:
      646 Bytes
      Aufrufe:
      394
    • Main.txt
      Dateigröße:
      265 Bytes
      Aufrufe:
      366
  9. Oxy

    Oxy Antonowka

    Dabei seit:
    15.03.07
    Beiträge:
    363
    Vergiss aber nicht vorher zu Compilieren javac -file danach java Klassename(name der MAIN klasse also wo die static drin ist)
     
  10. Mighty-M@ck

    Mighty-M@ck Jonagold

    Dabei seit:
    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.
     
  11. Oxy

    Oxy Antonowka

    Dabei seit:
    15.03.07
    Beiträge:
    363
    Jo np =)
     
  12. Trapper

    Trapper Boskop

    Dabei seit:
    12.05.05
    Beiträge:
    213
    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.
     

Diese Seite empfehlen