2016-04-21 18 views
0

Ich bin völlig neu in der Programmierung. Kannst du mir ein paar Tipps geben, wie ich meinen Code verbessern kann?
Das Problem war:
Gegeben ein Array von Zeichenfolgen, ein neues Array ohne die Zeichenfolgen, die gleich der Zielzeichenfolge sind. Ein Ansatz besteht darin, die Vorkommen der Zielzeichenfolge zu zählen, ein neues Array mit der richtigen Länge zu erstellen und dann die korrekten Zeichenfolgen zu kopieren.
Und mein Code:Code Verbesserung, Array von Strings

public String[] wordsWithout(String[] words, String target) { 
    int numberOfTargets = 0; 

    for (int i = 0; i < words.length; i++){ 
    if (words[i].equals(target)) numberOfTargets++; 
    } 

    String[] result = new String[words.length - numberOfTargets]; 

    for (int i = 0; i < words.length - numberOfTargets; i++){ // 1 
    result[i] = "0";          // 1 
    }               // 1 

    for (int i = 0; i < words.length; i++){ 
    if (!words[i].equals(target)){ 
     int j = 0;       // 2 
     while (!result[j].equals("0")){ // 2 
     j++;        // 2 
     }         // 2 
     result[j] = words[i]; 
    } 
    } 
    return result; 
} 

Beispiel dafür, wie Code funktioniert:

wordsWithout(["aa", "ab", "ac", "aa"], "aa") → ["ab", "ac"] 

Ich weiß, dass neue Array von ints von Nullen dy Standard gefüllt ist. Was ist mit neuen Arrays von Strings? Ich musste es künstlich mit Nullen füllen, die mit // 1 markiert waren, so dass ich zum rechten Element "scrollen" konnte, wenn ich meinem neuen Array Elemente hinzufügen musste, die mit // 2 markiert waren.
Mein Code scheint irgendwie peinlich zu sein. Gibt es Standardmethoden oder allgemeine Möglichkeiten, meinen Code zu verbessern?

+0

Nun können Sie 'Arrays.fill (Ergebnis "0") verwenden,' die for-Schleife zu vermeiden. Arrays von Objekten werden immer auf null initialisiert, genau wie primitive Arrays auf 0 oder im Fall von Boolean auf 'false' initialisiert werden. Diese Frage gehört jedoch zum Code Review, nicht zu StackOverflow. – Kayaman

+0

Sie finden die Antwort hier: http://stackoverflow.com/questions/7940337/remove-a-specific-string-from-an-array-of-string Als eine Randnotiz, wenn Sie ein Anfänger sind , denke nicht an Effizienz. Java ist optimiert genug, um grundlegende Dinge zu tun. Es ist nur wichtig, wenn Sie eine Datenbank abfragen, aber für diese Operationen ist es ein Bruchteil einer Millisekunde Unterschied zwischen dieser und dieser Implementierung, aber den Code lesbar zu machen, zahlt auf lange Sicht viel mehr. Viel Glück! –

Antwort

0

Sie müssen nicht jedes Element auf "0" setzen.

tun Nur soviel:

public static String[] wordsWithout(String[] words, String target) { 
    int numberOfTargets = 0; 

    for (int i = 0; i < words.length; i++){ 
     if (words[i].equals(target)) numberOfTargets++; 
    } 

    String[] result = new String[words.length - numberOfTargets]; 
    int j =0; // for indices of result 
    for (int i = 0; i < words.length; i++){ 
     if (!words[i].equals(target)){   
      result[j++] = words[i]; 
     } 
    } 
    return result; 
} 
+0

Vielen Dank, Leute! So viel zum Nachdenken. Allerdings werde ich daran denken, dass ich diese Art von Fragen nächstes Mal im Abschnitt "Code Review" veröffentlichen muss. – Alex

0

Sieht aus wie Ihr Code eine Menge von nur unter Verwendung eines ArrayList vereinfacht werden könnten.

public String[] wordsWithout(String[] words, String target) 
{ 
    ArrayList<String> list = new ArrayList<String>(); 
    for(int i = 0; i < words.length; ++i) 
    { 
     if(!words[i].equals(target)) 
     { 
      list.add(words[i]); 
     } 
    } 
    return list.toArray(new String[0]); 
} 

Grundsätzlich stattdessen die Größe des Zielarrays für die Berechnung und Initialisierung es, verwenden Sie eine Liste (die in der Größe variabel ist), setzen in allen Elementen Sie brauchen, und dann ein neues Array erstellen aus es.

Unabhängig davon, bitte erfinden Sie nicht Ihre eigenen Werte ("0"), um einen Nullwert zu beschreiben - dafür gibt es ein spezielles Schlüsselwort, null.

+0

Danke, hab es geschafft! Gibt es einen Unterschied, ++ i oder i ++ in der for-Schleife zu verwenden? – Alex

+0

@Alex Nein, es ist nur eine persönliche Vorliebe. – Siguza

+1

@Alex in diesem Fall nicht, aber schauen Sie hier: http://StackOverflow.com/Questions/2315705/what-is-the-difference-between-i-i-in-for-loop-java – licklake

0

Verwenden

for (String s : words) { 

    if (s.equals(target)) 
    numberOfTargets++; 
} 
Verwandte Themen