# String Array in Double Array umwandeln



## Juuro (17. Jun 2005)

Hallo!

Ich habe 

```
String text [] = new String[10];
        double zahl [] = new double[10];
        int jahre;

        text[1] = tfBetrag.getText();
        text[2] = tfJahre.getText();
        text[3] = tfZins.getText();
```

Das funktioniert soweit auch, aber wenn ich den String array nun in den double array umwandeln will funktioniert das ncith obwohl mit mein Java-Editor keine Fehler anzeigt!



```
zahl[10] = Double.parseDouble(text[10]);
```

Ich bitte um Hilfe! 

Schonmal vielen Dank!
Viele Grüße, Juuro!


----------



## Roar (17. Jun 2005)

es gibt weder einen array index 10 im array zahl noch im array text. man fängt bei 0 an zu zählen


----------



## Juuro (17. Jun 2005)

Also 
	
	
	
	





```
zahl[10] = Double.parseDouble(text[10]);
```
ersetzen durch 

```
zahl[] = Double.parseDouble(text[10]);
```
?


----------



## Roar (17. Jun 2005)

nein, schau mal hier


----------



## L-ectron-X (17. Jun 2005)

Ein Array wird mit einer Anzahl von Feldern initialisiert.

```
String[] text = new String[10];
```
Das bedeutet, das Array kann 10 Elemente vom Typ String aufnehmen.
Für den Zugriff werden Indizes verwendet, die aber bei 0 beginnen zu zählen.

```
zahl[0] = Double.parseDouble(text[0]);
```
Auf diese Art und Weise wird der letzte Index mit 9 gezählt.


----------



## Juuro (17. Jun 2005)

Ah ok, dankesehr!

Allerdings funktioniert das trotzdem noch nciht. Wenn ich den Button klicke in dem das steht werden mit folgende Fehlermeldungen angezeigt:

```
java.lang.NullPointerException

	at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:980)

	at java.lang.Double.parseDouble(Double.java:220)

	at unbenannt2.Frame1.btRechne_actionPerformed(Frame1.java:73)

	at unbenannt2.Frame1_btRechne_actionAdapter.actionPerformed(Frame1.java:98)

	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)

	at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839)

	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)

	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)

	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)

	at java.awt.Component.processMouseEvent(Component.java:5100)

	at java.awt.Component.processEvent(Component.java:4897)

	at java.awt.Container.processEvent(Container.java:1569)

	at java.awt.Component.dispatchEventImpl(Component.java:3615)

	at java.awt.Container.dispatchEventImpl(Container.java:1627)

	at java.awt.Component.dispatchEvent(Component.java:3477)

	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)

	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)

	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)

	at java.awt.Container.dispatchEventImpl(Container.java:1613)

	at java.awt.Window.dispatchEventImpl(Window.java:1606)

	at java.awt.Component.dispatchEvent(Component.java:3477)

	at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)

	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)

	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)

	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)

	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)

	at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
```
Könnt ihr da irgendwas rauslesen?
Ich als Laie nicht!

PS: Ich benutze den Borland JBuilder 2005 Foundation


----------



## mic_checker (17. Jun 2005)

guck ma ob du alles richtig initialisiert hast und poste mal die zeilen code die die exception betreffen....


----------



## Juuro (17. Jun 2005)

Das hier:

```
public void btRechne_actionPerformed(ActionEvent e) {
        String text [] = new String[10];
        double zahl [] = new double[10];
        int jahre;

        text[1] = tfBetrag.getText();
        text[2] = tfJahre.getText();
        text[3] = tfZins.getText();
        
        zahl[0] = Double.parseDouble(text[0]);
                
        

        for (int i = 1; i<=zahl[2]; i++)
       {    if (i<=(zahl[2]/2))
           {zahl[1] = zahl[1]*(1+zahl[3]/100);
           }
            else
           {zahl[1] = zahl[1]*(1+zahl[3]/50);
           }
            taAusgabe.append("Guthaben am Ende des "+i+". Jahres: "+zahl[1]+"\n");
        }

    }
```
???


----------



## byte (18. Jun 2005)

du hast jetzt nur das erste feld (index 0) in double umgewandelt. der rest des arrays zahl ist leer, daher die nullpointer exception.

du musst alle 10 elemente in double umwandeln, am besten mit ner for schleife über der länge des arrays.


----------



## Roar (18. Jun 2005)

byto hat gesagt.:
			
		

> du hast jetzt nur das erste feld (index 0) in double umgewandelt. der rest des arrays zahl ist leer, daher die nullpointer exception.


nein, die nullpointerexceptino kommt, weil der übergebene string nicht in einen double geparst werden kann.


----------



## pappenpeter (18. Jun 2005)

Also, wenn du nur den String Array in einn Double Array verwandel willst ohne jegliche Berechnung versuch es mal hiermit:


```
private String text [] = new String[10];   // String array 
  private double zahl [] = new double[text.length];  // Array aus Double Werten mit der Länge des String Arrays anlegen
  for (int i = 0; i < text.length; i++) {   // Zählt von 0 bis zum letzten Element aus text
    try {
          zahl[i] = Double.parseDouble(text[i]);  // Parst
    } catch (NumberFormatException e) {        // Fängt Fehler ab wenn text nicht in Double geparst werden kann
          System.out.println("Txt konnte nicht geparst werden");
    }
  }
```

Damit hast du dann alle Srting Werte aus dem Feld text in das Feld Zahlen geparst. Der Try - catch block fängt dabei konvertierungsfehler ab. Mußt du halt sehen ob du den brauchst oder ob du vorher schon abfragst ob die Werte bei der eingabe Double sind..


----------



## byte (18. Jun 2005)

Roar hat gesagt.:
			
		

> byto hat gesagt.:
> 
> 
> 
> ...




```
for (int i = 1; i<=zahl[2]; i++)
```

zahl[2] wurde nicht zugewiesen => nullpointer exception


----------



## Roar (18. Jun 2005)

byto hat gesagt.:
			
		

> Roar hat gesagt.:
> 
> 
> 
> ...


nein, primitive datentypen können nicht null sein. und wenn du in den stacktrace der exception schaust siehst du, dass die exception in der methode readJavaFormatString() fliegt, wo der string geparst wird, und nicht in der methode von Juuro. Desweiteren steht auch in der Dokumentation, dass eine NullPointerException fliegt, falls der string nicht geparst werden kann.


----------



## Juuro (18. Jun 2005)

Also eigentlich funktioniert das parsen schon, denn wenn ich folgendes zum testen schreibe:

```
String text [] = new String[10];
        double zahl [] = new double[text.length];
        int jahre;

        text[0] = tfBetrag.getText();
        text[1] = tfJahre.getText();
        text[2] = tfZins.getText();

        for (int i = 0; i<text.length; i++)
        {zahl[i] = Double.parseDouble(text[i]);
            taAusgabe.append("Zahl"+i+":"+zahl[i]+"\n");
        }
```
Dann wird alles so ausgegeben ich ichs eingegeben hab!
Allrdings kommt trotzden noch dieselbe Fehlermeldung!
Und anscheinend hat der dann Probleme damit mit dem zahl-Array weiter zu arbeiten! :roll:


----------



## Roar (18. Jun 2005)

prüf mal imemr vor dem parsen was in dem string drinsteht....


----------



## byte (18. Jun 2005)

Roar hat gesagt.:
			
		

> nein, primitive datentypen können nicht null sein. und wenn du in den stacktrace der exception schaust siehst du, dass die exception in der methode readJavaFormatString() fliegt, wo der string geparst wird, und nicht in der methode von Juuro. Desweiteren steht auch in der Dokumentation, dass eine NullPointerException fliegt, falls der string nicht geparst werden kann.



du hast recht, da war ich wohl zu vorschnell. primitive datentypen sind natürlich nicht null sondern haben per default nen wert. allerdings ist trotzdem ein fehler an selbiger stelle, weil int mit double verglichen wird. ich wusste doch, da ist was faul.


----------



## Juuro (18. Jun 2005)

Also wenn ich das dann so schreibe:

```
for (int i = 0; i<text.length; i++)
        {   taAusgabe.append("text"+i+": "+text[i]+"\n");
            zahl[i] = Double.parseDouble(text[i]);
            taAusgabe.append("zahl"+i+": "+zahl[i]+"\n");
        }
```

Da wird das ausgegeben:


> text0: 1000
> zahl0: 1000.0
> text1: 6
> zahl1: 6.0
> ...


Woher das text3 kommt frage ich mich allerdings... :roll:[/code]


----------



## Roar (18. Jun 2005)

na, was nicht ist, das kannst du auch nicht parsen


----------



## Juuro (18. Jun 2005)

Ja logisch! 

Aber wo kommt das her??

```
public void btRechne_actionPerformed(ActionEvent e) {
        String text [] = new String[10];
        double zahl [] = new double[text.length];
        

        text[0] = tfBetrag.getText();
        text[1] = tfJahre.getText();
        text[2] = tfZins.getText();

        for (int i = 0; i<text.length; i++)
        {   taAusgabe.append("text"+i+": "+text[i]+"\n");
            zahl[i] = Double.parseDouble(text[i]);
            taAusgabe.append("zahl"+i+": "+zahl[i]+"\n");
        }
```


----------



## L-ectron-X (18. Jun 2005)

Du hast beide Arrays für 10 Felder initalisiert, aber nur 3 belegt.
Die restlichen Felder dürften daher null sein.


----------



## Juuro (18. Jun 2005)

Aha, dankeschön! Also das "null" wird nun zwar nimmer angezeigt aber nun hab ich bei folgendem Quelltext ne andere Fehlermeldung.

```
public void btRechne_actionPerformed(ActionEvent e) {
        String text [] = new String[3];
        double zahl [] = new double[text.length];
        

        text[0] = tfBetrag.getText();
        text[1] = tfJahre.getText();
        text[2] = tfZins.getText();

        for (int i = 0; i<=text.length; i++)
        {   zahl[i] = Double.parseDouble(text[i]);
            
        }



        for (int i = 1; i<=zahl[1]; i++)
       {    if (i<=(zahl[1]/2))
           {zahl[0] = zahl[0]*(1+zahl[2]/100);
           }
            else
           {zahl[0] = zahl[0]*(1+zahl[2]/50);
           }
            taAusgabe.append("Guthaben am Ende des "+i+". Jahres: "+zahl[0]+"\n");
        }

    }
```



			
				Fehlermeldung hat gesagt.:
			
		

> java.lang.ArrayIndexOutOfBoundsException: 3
> at unbenannt2.Frame1.btRechne_actionPerformed(Frame1.java:74)
> at unbenannt2.Frame1_btRechne_actionAdapter.actionPerformed(Frame1.java:101)
> at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)
> ...


----------



## L-ectron-X (18. Jun 2005)

```
for (int i = 0; i < text.length; i++) {
```

So sollte es gehen.
Beim Durchlauf mit <= würde auch noch auf Index 3 geprüft. Da das Array aber bei 0 beginnt zu zählen... :wink:


----------



## byte (18. Jun 2005)

mach daraus:


```
for (int i = 0; i<=text.length; i++)
```

mal das hier:


```
for (int i = 0; i<text.length; i++)
```


----------



## Juuro (18. Jun 2005)

Jaa juhuuu! 
Es tut!  Spitze! Dankesehr! Einwandfrei!

Aber angenommen ich hätte jetzt 30 Eigabe-Felder. Kann ich die auch mit nem Array auslesen oder muss ich die einzeln mit 
	
	
	
	





```
text[0] = tfText0.getText();
text[1] = tfText1.getText();
text[2] = tfText2.getText();
...
```
usw. auslesen?


----------



## L-ectron-X (18. Jun 2005)

Dazu kannst du dir ein Textfeld-Array anlegen.

```
TextField[] tf = new TextField[30];
for(int i = 0; i < tf.length; i++) { //30 Textfelder im Array anlegen
  tf[i] = new TextField();
}
```
Musst dir eben nur merken, welches Textfeld auf der Oberfläche welchen Index hat.

Alle Textfelder auslesen würde dann so gehen.

```
String[] texte = new String[tf.length];
for(int i = 0; i < tf.length; i++) {
  texte[i] = tf[i].getText();
}
```
Danach hast du die ausgelesenen Texte in den jeweiligen Feldern des String-Arrays.


----------



## Juuro (18. Jun 2005)

Ah danke!

Und in deinem Beispiel muss ich dann auf der Oberfläche die Textfelder tf[0], tf[1], tf[2] usw. nennen?


----------



## L-ectron-X (18. Jun 2005)

Ich denke ja, weil ja jedes Textfeld-Objekt auf der Oberfläche andere Positionen erhält.
Unter bestimmten Umständen könnte man das aber sicher auch in einer for-Schleife machen, aber das wäre möglicherwiese aufwändiger, als die Felder des Arrays mit ihrem Index anzusprechen.


----------



## Juuro (18. Jun 2005)

Hm aber wenn ich da tf[0] eingebe kommt "Illegaler feldname!" :-/


----------



## L-ectron-X (18. Jun 2005)

Zeige mal bitte den relevanten Code.


----------



## Juuro (18. Jun 2005)

```
TextField tf [] = new TextField[3];
        String text [] = new String[tf.length];
        double zahl [] = new double[text.length];

        taAusgabe.setText("");
        
        for (int i = 0; i>tf.length; i++) {
            tf[i] = new TextField();
        }
        
        for (int i = 0; i>tf.length; i++) {
            text[i] = tf[i].getText();
        }
```


----------



## L-ectron-X (18. Jun 2005)

Tausche das mal aus!

```
for (int i = 0; i>tf.length; i++) {
```

mit

```
for (int i = 0; i < tf.length; i++) {
```


----------



## Juuro (18. Jun 2005)

Ähm, aber damit hab ich ja nicht das Problem mit den Feldnamen gelöst! 

Das Prgramm hat was gegen [ und ] im Feldnamen!


----------

