# symmetrische Zahlen!



## Burner (23. Jan 2006)

*Hallo, *

*meine aufgabe lautet:*

Erstelle ein applet worin maximum 8 Zahlen einzugeben sind. Nun soll úberprúft werden ob die zahlenreihe symmetrisch ist oder nicht! Man nennet eine zahl symmetrisch, wenn man sie von links nach rechts genauso liesst, als von rechts nach links! 

*das progamm wird auf hollandisch geschrieben!*

*ein beispiel: *

3 2 1 1 2 3       symmetrisch! 
4 5 7 0 7 5 4    symmetrisch!
1 2 1               symmetrisch!
4 5 6 4 5 6       nicht symmetrisch!

*quellcode: (erstmal nur fúr ungerade zahlen)*

_1. der button:_

```
class KnopHandler implements ActionListener
  {
    public void actionPerformed (ActionEvent e)
    {
    String temp = invoerVak.getText();                // zahl in den string temp laden    
    AANTAL_GETALLEN = invoerVak.getText().length();   // lánge der zahl in die variable AANTAL_GETALLEN laden



    for (int i = 0; i < (MAX_GETALLEN -1); i++)  // die einzellnen zahlen in den jeweiligen array laden
      {
       int cijfer = temp.charAt(i) - 48; // ASC II 48 = 1
       ARRAY[i] = cijfer;
      }
    }
  }
```

_2. methode ungerade zahlen_

```
public void ONEVEN_GETALLEN()
  {
    MIDDEN = (AANTAL_GETALLEN - 1)/2; // errechnen der mitte der zahl
    int i;
    for (i = 0; i < MIDDEN; i++) 
    {
      if (ARRAY[MIDDEN +1] == ARRAY[MIDDEN -1]) // verlgeichen der arrays
      {
        uitvoerVak.setText ("Getall symmetrisch");
      }
      else
      {
        uitvoerVak.setText ("Getall niet symmetrisch");
      }
    }
  }
```

Ein problem ist das der String die fehlermeldung: string index out of bounds! 
also úberschreite ich mein limit von max 8 zahlen! wenn ich also nur 4 zahlen eingebe soll der string fúr den rest einfach nur eine 0 eintragen oder so, damit ich halt rechnen kann.

ich habe schon úberlegt mit StringToArray und ArrayToString zu arbeiten, aber ich weis nicht genau wie ich es hier anwenden soll! 


vielleicht hat ja mal jemand von euch eine idee, dieses programm einfach und logisch zu schreiben


----------



## Timmah (23. Jan 2006)

Symmetrisch in diesem Zusammenhang nennt man wohl eher Palindrom, glaub ich...

Hier mal eine Methode, die ich mal irgendwann geschrieben habe; die wird dir sicher helfen, auch wenn es hier um eine Zeichenkette geht, aber das ist ja eigentlich egal.



```
public boolean pruefePalindrom(String palindrom)
	{
		String original = palindrom;
		boolean isPalindrom = false;
		
		StringBuffer text = new StringBuffer(original);
		String vergleich;
		int laenge;
		int zaehler;
		
		laenge = text.length();
		
		for (zaehler = laenge -1; zaehler >= 0; zaehler--){
			if (!Character.isLetter(text.charAt(zaehler))) {
				text.deleteCharAt(zaehler);
			}
		}
		
		vergleich = text.toString();
		if (text.reverse().toString().compareToIgnoreCase(vergleich) == 0){
			isPalindrom = true;
		}
		else {
			isPalindrom = false;
		}
		
		return isPalindrom;

	}
```


----------



## Sky (23. Jan 2006)

```
String s = "456456";
boolean isPalindrom = s.equals(new StringBuffer(s).reverse().toString());
```


----------



## Burner (23. Jan 2006)

ich habe mir gedacht das ich ein textfeld mache, dann jede einzelne zahl in einen array lade mit hilfe einer for schleife und charAt, und diese arrays dann mit einander vergleiche, also möglichst wenig quelltext

aber ich werde mal eure tips ausprobieren danke!


----------



## Sky (24. Jan 2006)

Burner hat gesagt.:
			
		

> ich habe mir gedacht das ich ein textfeld mache, dann jede einzelne zahl in einen array lade mit hilfe einer for schleife und charAt, und diese arrays dann mit einander vergleiche, also möglichst wenig quelltext
> 
> aber ich werde mal eure tips ausprobieren danke!


Verstehe nicht so ganz vorauf du hinaus willst:

- JTextField#getText liefert den Text als String
- for-Schleife, welche den ersten mit dem letzen, den zweitem mit dem vorletzen usw. vergleicht (String#charAt)
- fertig

Wozu brauchst Du da irgendwelche Arrays ?


----------



## Burner (26. Jan 2006)

man muss mit arrays arbeiten, darum!


----------



## Sky (26. Jan 2006)

Burner hat gesagt.:
			
		

> man muss mit arrays arbeiten, darum!


Tut mir leid, dass ich es nicht verstehe.

"darum!" ist natürlich die beste und zulässigste Begründung für ein 'Warum?'. Ich ziehe meine Frage damit mit sofortiger Wirkung zurück.


----------



## Burner (27. Jan 2006)

hehe ja sorry, ist aber bei der vorgabe nun halt mal mit vorgegeben! natürlich ist es auch anders möglich, obwohl ich auch glaube das es mit arrays die einfacher ist


----------



## Murray (27. Jan 2006)

Man kann das sicher auch mit Arrays lösen, allerdings scheinen mir im Code ein paar kleinere Fehler vorzuliegen:


```
public void ONEVEN_GETALLEN()
  {
   //-- ich gehe mal davon aus, das AANTAL_GETALLEN die Anzahl der Ziffern und damit vermutlich ARRAY.length ist
    MIDDEN = (AANTAL_GETALLEN-1)/2; // errechnen der mitte der zahl 
   /*
       ARRAY.length = 5 -> MIDDEN = 2 -> vergleiche A[0] mit A[4], vergleiche A[1] mit A[3], A[2] spielt keine Rolle
       ARRAY.length = 8 -> MIDDEN = 3 -> vgl. A[0] mit A[7],  A[1] mit A[6],  A[2] mit A[5],  A[3] mit A[4]
   */

    int i;
    for (i = 0; i < MIDDEN; i++)
    {

      //if (ARRAY[MIDDEN +1] == ARRAY[MIDDEN -1]) // verlgeichen der arrays  
      /*
       Wenn MIDDEN von 0 bis ARRAY.length / 2 geht, dann fuehrt ARRAY[MIDDEN -1] sofoert zu einer Exception.
       Eigentlich will man doch die erste Zahl mit der letzten, die zweite mit der vorletzten usw. vergleichen
     */
      
      if (ARRAY[MIDDEN] == ARRAY[AANTAL_GETALLEN -MIDDEN-1]) // verlgeichen der arrays
      {
        //--- bis jetzt symmetrisch
        uitvoerVak.setText ("Getall symmetrisch");
      }
      else
      {
        uitvoerVak.setText ("Getall niet symmetrisch");
        //---- wenn ein Vergleich nicht uebereinstimmt, ist die ganze Zahl nicht symmmetrisch, und wir sind fertig
        break;
      }
    }
  }
```

BTW: normalerweise schreibt man nur Konstanten KOMPLETT_IN_GROSSBUCHSTABEN, fuer Variablen und Methodennamen ist Kleinschreibung ueblich.

//EDIT 20060127,22:56: schwachsinnigen Kommentar korrigiert


----------



## Timmah (28. Jan 2006)

Burner hat gesagt.:
			
		

> hehe ja sorry, ist aber bei der vorgabe nun halt mal mit vorgegeben! natürlich ist es auch anders möglich, obwohl ich auch glaube das es mit arrays die einfacher ist



Das ist es ganz sicher nicht, wie du auch hier siehst:



> ```
> String s = "456456";
> boolean isPalindrom = s.equals(new StringBuffer(s).reverse().toString());
> ```



Aber dass es zur Aufgabe gehört es mit Arrays zu lösen, hättest du von Anfang an sagen müssen.


----------

