# Array Ausgabe



## new_newbie (9. Jun 2016)

Hallo,
ich bin kompletter Neueinsteiger und habe mit meinem Code den ich ändern soll ein Problem.
Es geht um Returnwerte (Länderkennenungen) Bsp.: DE-30159 Hannover
Ich habe dafür 2 Arrays angelegt (Zuordnung) und (LandStadtPlz). Folgendes Problem: Wenn ich nun Parameter übergebe bekomme ich immer den returnwert "null" ich hätte aber gerne, wenn ich z.B. eine "1" übergebe, dass ich dann z.B. "30159 Hannover" zurück bekomme.
Hier mein Code:
Main:


```
public class Main {
   public static void main(String[] args) {
     GetPlzOrtAusTabelleClass GetPlzOrtAusTabelle = new GetPlzOrtAusTabelleClass();

     System.out.println(GetPlzOrtAusTabelle.GetPlzOrtAusTabelle("1"));
     System.out.println(GetPlzOrtAusTabelle.GetPlzOrtAusTabelle("2"));
     System.out.println(GetPlzOrtAusTabelle.GetPlzOrtAusTabelle("3"));
     System.out.println(GetPlzOrtAusTabelle.GetPlzOrtAusTabelle("4"));
     System.out.println(GetPlzOrtAusTabelle.GetPlzOrtAusTabelle("5"));
     System.out.println(GetPlzOrtAusTabelle.GetPlzOrtAusTabelle("6"));
     System.out.println(GetPlzOrtAusTabelle.GetPlzOrtAusTabelle("7"));
     System.out.println(GetPlzOrtAusTabelle.GetPlzOrtAusTabelle("8"));
   }
}
```

Klasse mit der Logik:


```
public class GetPlzOrtAusTabelleClass {
   public String GetPlzOrtAusTabelle(String Key) {
     int I;
     int Col = 11;
     String Land = "";
     int Subindex = 0;
     String SpalteAdrNr = "2";
     int AdrZeileAnrede = 3;
     String Zuordnung[] = { "1", "2", "3", "4", "5", "6", "7", "8"};
     String LandStadtPlz[] = { "DE-30159 Hannover", "DE-30161 Hannover", "DE-30163 Hannover", "DE-30165 Hannover", " 20095 Hamburg", " 20097 Hambrug", " 20099 Hamburg", " 20144 Hamburg"};
     String Tabelle = "";

     if (Tabelle != "sh_adr") {
       Col = 10;
       SpalteAdrNr = "1";
       AdrZeileAnrede = 2;
     }

     // -------------------------------------------
     // Adressdaten: Plz und Ort holen aus sh_adr oder sh_temp_adr
     // Key als String ist AdressNummer, Key als Integer ist die Zeilennummer in der Tabelle
     // -------------------------------------------
     if (Key instanceof String) {
       I = CGtFindNextItemS(Zuordnung, LandStadtPlz, Tabelle, Subindex, Key, SpalteAdrNr, 1);
     } else {
       I = Integer.valueOf(Key);
     }

     while (Col > AdrZeileAnrede) {
       if (CGtGetEntryS(Zuordnung, LandStadtPlz, Tabelle, Subindex, I, Col) != ""){
         if (IsNumeric(substring(CGtGetEntryS(Zuordnung, LandStadtPlz, Tabelle, Subindex, I, Col), 1, 4))){
           // --- mit PLZ ohne Länderkennung ---
           return(CGtGetEntryS(Zuordnung, LandStadtPlz, Tabelle, Subindex, I, Col));
         } else {
           // --- mit Länderkennung ---
           Land = CGtGetEntryS(Zuordnung, LandStadtPlz, Tabelle, Subindex, I, Col);
         }
         if (IsPartOfString("-", Land, true)) {
           // --- alte Variante ---
           return (CGtGetEntryS(Zuordnung, LandStadtPlz, Tabelle, Subindex, I, Col));
         } else {
           // --- Aufbau nach DIN 5008 ---
           return (Land + "-" + CGtGetEntryS(Zuordnung, LandStadtPlz, Tabelle, Subindex, I, Col - 1));
         }
       } else {
         Col = Col-1;
       }
     }
     return ("");
   }

   public int CGtFindNextItemS(String[] zuordnung, String[] landStadtPlz, String tabelle, int subindex, String key,  String spalteAdrNr, inti) {
     return 0;
   }

   public boolean IsNumeric(Object substring) {
     return false;
   }

   public Object substring(String cGtGetEntryS, inti, intj) {
     return null;
   }

   public boolean IsPartOfString(String string, String land, booleanb) {
     return false;
   }

   public String CGtGetEntryS(String[] zuordnung, String[] landStadtPlz, String tabelle, int subindex, inti, intcol) {
     return null;
   }
}
```

Und die Augabe ist dementsprechend:
null-null
null-null
null-null
null-null
null-null
null-null
null-null
null-null
Sie sollte aber:
1 DE-30159 Hannover
2 DE-30161 Hannover
usw. das die Zuordnung zu den Arrays passt


----------



## Joose (9. Jun 2016)

Deine anderen Methoden sollten vielleicht auch noch Logik enthalten 
Du rufst öfters `CGtGetEntryS` auf, diese Methode gibt aber einfach nur `null` zurück.

Ansonsten gibts noch andere "Probleme" bei deinem Code:

```
if (Tabelle != "sh_adr") {
```
Strings werden mit `.equals(...)` verglichen nicht mit `==`.

Diese Überprüfung `if (Key instanceof String) {` wird immer wahr sein, da du es so deklariert hast das der Parameter "Key" vom Typ String ist.

Methoden werden in Java in lowerCamelCase geschrieben, ebenso Variablen. Einzig Klassennamen sind in UpperCamelCase zu schreiben.

EDIT: Folgender Code sollte dir das liefern was du willst

```
public class GetPlzOrtAusTabelleClass {
   String LandStadtPlz[] = { "DE-30159 Hannover", "DE-30161 Hannover", "DE-30163 Hannover", "DE-30165 Hannover", " 20095 Hamburg", " 20097 Hambrug", " 20099 Hamburg", " 20144 Hamburg"};

   public String GetPlzOrtAusTabelle(int key) {
     if(key < 1 || key > LandStadtPlz.length) {
       throw new ArrayIndexOutOfBoundException("FEHLER");
     }
    
     return LandStadtPlz[key - 1];
   }
}
```


----------



## da921610 (9. Jun 2016)

Und da du noch am Anfang stehst, solltest du dir mal ein paar Schreibweisen vom Code angewöhnen. Gibt da so ein paar Richtlinien, die das Leben deutlich erleichtern. Gerade was Methoden-Benennungen angeht:

https://de.wikibooks.org/wiki/Java_Standard:_Variablen_und_Bezeichner

Und nenn deine Klasse nicht nach der Hauptfunktion einer Methode.
Anstatt GetPlzOrtAusTabelleClass  könntest du sie auch einfach nur Ort nennen oder so. Denn zu jedem Ort gibt es ein dazugehöriges Land, Postleitzahl etc.


----------



## Xyz1 (9. Jun 2016)

Bitte beschreib' nochmal genau, in deiner natürlichsprachlichen Umschreibung, _*wie*_ die Suche funktionieren _*soll*_, wenn der User etwas eingibt. Danke.


----------



## new_newbie (9. Jun 2016)

Danke erstmal für die Antworten.
Es soll so ablaufen, das wenn ich eine 1-8 übergebe mein Code durchlaufen wird und ich dann eine entsprechende Ausgabe bekomme, wie ich oben schon beschrieben habe.
Ich habe ein Array mit Daten in diesem Fall sind es Länder mit Plz und Stadt. Wenn jetzt was übergeben wird, soll es entweder die schleife mit Länderkennung durchlaufen(DE-...) oder halt nicht und in der Console angezeigt werden.


----------



## Joose (9. Jun 2016)

new_newbie hat gesagt.:


> Es soll so ablaufen, das wenn ich eine 1-8 übergebe mein Code durchlaufen wird und ich dann eine entsprechende Ausgabe bekomme, wie ich oben schon beschrieben habe.



Gut und was soll dein Code großartig machen? Es ist nicht ersichtlich was die Schleife machen, wozu dienen die ganzen if-Bedingungen und warum enthält keine Methode Code?
Geht es nur darum aus dem Array den richtigen Eintrag zu bekommen anhand des Key welchen du übergibst?
Dafür habe ich dir oben schon eine gekürzte Version gezeigt.


----------



## new_newbie (9. Jun 2016)

Ich habe den Code so bekommen und muss ihn einfach anpassen, ohne da großartig was zu verändern, dass ist meine Aufgabe. Ich würde ja gerne mehr Infos geben, wenn ich auch welche hätte.


----------



## mrBrown (9. Jun 2016)

new_newbie hat gesagt.:


> Ich habe den Code so bekommen und muss ihn einfach anpassen, ohne da großartig was zu verändern, dass ist meine Aufgabe. Ich würde ja gerne mehr Infos geben, wenn ich auch welche hätte.


Rein aus Interesse, wer gibt solchen Code raus?


----------



## Xyz1 (9. Jun 2016)

new_newbie hat gesagt.:


> Es soll so ablaufen, das wenn ich eine 1-8 übergebe mein Code durchlaufen wird und ich dann eine entsprechende Ausgabe bekomme, wie ich oben schon beschrieben habe.



Das ist keine Anforderung. Ich geb 1 ein, dann
a) genau Übereinstimmung,
b) Anfang/Ende Überseinstimmung,
c) beinhaltet,
d) ungefähr/so ein etwa/fast,
e) ...

Was hättest denn gern?

Natürlichsprachlich heißt:
Ich geb 1 ein, und alle PLZs, in denen an irgendeiner Stelle 1 vorkommt, werden zurückgegeben.


----------



## Joose (10. Jun 2016)

new_newbie hat gesagt.:


> Ich habe den Code so bekommen und muss ihn einfach anpassen, ohne da großartig was zu verändern, dass ist meine Aufgabe. Ich würde ja gerne mehr Infos geben, wenn ich auch welche hätte.



Gut abgesehen davon das der Code den du bekommen hast grausig ist, aber dafür kannst du ja nichts. 

Ich nehme an deine Aufgabe ist es die restlichen Methoden mit Code zu füllen, damit das Beispiel funktioniert.
Leider wäre eine gewisse Angabe dazu wichtig, was denn die einzelnen Methoden und deren Parameter bedeuten. Ich würde mich hier an den Aufgabensteller wenden und nochmals nachfragen was die Aufgabe ist und ob der Code alleine die Angabe ist oder es noch weitere Informationen gibt.


----------

