2016-07-09 20 views
0

In der folgenden Code-Zeichenfolge wird in einer Methode mit durch Leerzeichen getrennten Zahlen übergeben, Jetzt müssen wir die Summe der kleinsten zwei Zahlen in der Zeichenfolge bereitstellen.Wie kann ich diesen Java Code optimieren?

public class SumNearZero { 
public static int SumNearZero(String s) { 
String temp=s; 
int t1=0; 
for (int i = 0; i <s.length(); i++) { 

    if(temp.contains(" ")) 
    { 
     t1++; 
     temp=temp.substring(temp.indexOf(" ")+1); 
    } 
} 
int a[]=new int[++t1]; 
int index=0; 
for(int i=0; i<s.length(); i++) 
{ 
if(s.contains(" ")) 
{ 
    a[index]=Integer.parseInt(s.substring(0,s.indexOf(" "))); 
    s=s.substring(s.indexOf(" ")+1); 
    index++; 
} 

} 
a[index]=Integer.parseInt(s); 

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

for(int j=0; j<a.length-1; j++) 
{ 
    int c=a[j],n=a[j+1]; 
    if(c>n) 
    { 
     int t=c; 
     a[j]=n; 
     a[j+1]=t; 

    } } } 
int result=a.length>1 ? a[0]+a[1]:a[0]; 
return result; 
    } 
public static void main(String[] args) { 
System.out.println(SumNearZero("35 96 10 20 5")); 
     } 
     } 

Der obige Code funktioniert gut, aber ich möchte den Code reduzieren. Wenn Sie diesbezüglich einen Vorschlag machen, werde ich gerne von Ihnen lernen.

Einschränkungen: Verwendung von Collections, vordefinierten Methoden beispiel (String.split(), Arrays.sort() ...)

+0

Der Code funktioniert möglicherweise, aber der Stil ist grauenhaft. 1) Eindruck ist schrecklich. 2) Verstöße gegen Kennzeichnungskapitalisierungsregeln. 3) Bedeutungslose Variablennamen. 4) Keine Javadocs. IMO, sollten Sie diese Dinge beheben, bevor Sie Zeit damit verbringen, den Code zu vereinfachen/zu optimieren. Warum? Weil Sie andere Leute bitten, Ihren Code zu lesen ... jetzt. –

+0

Wenn Sie besser als oben haben, posten Sie diesen Code als Antwort. –

+0

Ich werde es besser machen als als das. Vergleichen Sie Ihren Codestil mit dem Code von Elliott Frisch. Sehen Sie, wie er seinen Code einprägt? Sehen Sie, wie er den richtigen Bezeichner-Stil verwendet und wie konsistente Leerzeichen, konsistente Zeilenumbrüche und so weiter? Kopiere Elliotts Codestil! –

Antwort

2

Ich schlage vor, würden Sie Ihre Berechnung und Anzeige in einem Konstruktor nicht durchführen, eine statische Methode erstellen und aufrufen. Erstellen Sie als nächstes in dieser Methode List von Integer, indem Sie die Teilstrings iterieren, die durch Aufteilen Ihrer Eingabe auf ein (oder mehrere) Leerzeichen erzeugt wurden. Dann sortiere die List. Schließlich die Summe der ersten beiden Elemente zurückgeben. Es ist auch gut, eine Fehlerüberprüfung für eine Nummer (oder keine Zahlen) durchzuführen. Das könnte

etwas aussehen
public static int sumNearZero(String s) { 
    List<Integer> al = new ArrayList<>(); 
    for (String str : s.split("\\s+")) { 
     al.add(Integer.parseInt(str)); 
    } 
    if (al.isEmpty()) { 
     return 0; 
    } 
    Collections.sort(al); 
    if (al.size() == 1) { 
     return al.get(0); 
    } 
    return (al.get(0) + al.get(1)); 
} 

aufrufen Dann ist es wie

public static void main(String[] args) { 
    System.out.println(sumNearZero("35 96 10 20 5")); 
} 

ich

einmal (wie ich erwartet hatte) sortiert die ersten beiden sind das Minimum, und die letzten beiden sind die maximale

+0

nette Antwort kurz und süß !! @Elliot – TapanHP

+0

wirklich nützlich, aber was, wenn Sammlungen verwenden, ist nicht im Code erlaubt –

+0

@piyushsingh Dann sollten Sie diese Einschränkung * in Ihrer Frage erwähnt haben. –

0

Sehen aus wie eine Übung, so dass nicht tatsächlichen Code zu geben.

Verwenden String.split und Arrays.sort

+0

es ist keine Übung, ich habe bereits funktionierenden Code oben gepostet. –

1

Sie es schneller jedes Mal unter Verwendung for each loop statt for-Schleife machen kann, ist es mehr empfohlen und schneller Ansatz, wenn Schleife für Array zunimmt, Listen etc.

Plus mehr können Sie alle Zahlen in der Zeichenfolge mit Hilfe der Split-Funktion, die Sie Array dieser Zahlen abrufen. Und dann können Sie Ihre Logik für kleine Zahlen setzen.Dies wird reduzieren zählen und erhöhen die Geschwindigkeit hoch im Allgemeinen, wenn Sie wollen über die Optimierung lernen dann this ist definitiv Leitfaden ich schlage vor, Sie durchlaufen. und siehe this Antwort.

+0

@piyushsingh gehen durch Elliots Antwort wird es der schnellste Weg sein – TapanHP