2015-05-06 8 views
8

Hier ist mein Code, um Zeichenketten in Java umgekehrt zu drucken, ohne eine API zu verwenden. Aber es funktioniert nicht richtig. Kann mir jemand helfen, es zu korrigieren?String-Wort rückwärts in Java mit falschem Ergebnis?

public static void main(String args[]) { 
    String input = "I am test"; 
    String result = ""; 
    for (int i = input.length() - 1; i > 0; i--) { 
     Character c = input.charAt(i); 
     if (c != ' ') { 
      result = c + result; 
     } else { 
      System.out.println(result + " "); 
     } 
    } 
} 

Es gibt Ausgang "test amtest", während der Ausgang sollte "Test bin ich" sein.

Bitte helfen Sie mir, genaue Ausgabe ohne vordefinierte Methoden oder APIs zu erhalten.

+2

Sie verwenden dort eine Menge vordefinierter Methoden und APIs: 'length',' charAt', 'println'. Sie verwenden auch vordefinierte Operatoren '-','> ',' - ','! = ',' + '. Kannst du erklären, warum diese erlaubt sind und andere nicht? Und noch wichtiger, welche Einschränkungen zwingt Sie dazu, nicht in der Lage zu sein, die vordefinierten Methoden und APIs zu verwenden? –

Antwort

14

Es gibt vier Probleme bei der Implementierung sind:

  • Sie gehen nicht den ganzen Weg bis auf Null,
  • Sie ein Ende der Zeile in der Schleife nach jedem Ausdruck setzen,
  • Sie tun Drucken Sie das "Schweif" -Ergebnis nicht, nachdem die Schleife beendet ist, und
  • Sie löschen nicht result nach dem Drucken in der Schleife.

Durch Beheben dieser Probleme erhalten Sie eine ordnungsgemäße Ausgabe (demo).

+0

Vielen Dank Herr, es funktioniert gut – khanam

4

versuchen

public static void main(String args[]) { 
    String input = "I am test"; 
    String result = ""; 
    int start=input.length()-1; 
    for (int i = input.length()-1; i >=0; i--) { 
     Character c = input.charAt(i); 
     if (c == ' ') { 
      for(int j=i+1;j<=start;j++) 
       result +=input.charAt(j); 
      result+=" "; 
      start=i-1; 
     } 
     else if (i==0) 
     { 
      for(int j=0;j<=start;j++) 
       result +=input.charAt(j); 
     } 
    } 
    System.out.println(result); 
}//It is giving output as test amtest 
//output should be : test am I 
+0

Bitte beachten Sie die Lösung von dasblinkenlight, eine – khanam

4
public static void main(String args[]) { 
    String input = "I am test"; 
    String result = ""; 

    String[] frags = input.split(" "); 
    for (int i = frags.length - 1; i >= 0; i--) { 
     System.out.print(frags[i] + " "); 
     } 
    System.out.println(); 
} 
+0

ohne Split verwendet. – khanam

+3

Brauchen Sie ein bisschen mehr Klarheit ... input.charAt (i) ist ein Java-API –

1

Sie können auch Rekursion versuchen -

public static void main(String args[]) { 
    String input = "I am test"; 
    List<String> listOfString = Arrays.asList(input.split(" ")); 

    System.out.println(reverseString(listOfString)); 

} 

private static String reverseString(List<String> input) { 
    int n = input.size(); 
    String result = ""; 
    if(input.isEmpty()){ 
     return result; 
    } 

    if(n>1){ 
    /*adding last element with space and changes the size of list as well 
     test + " " + [am, I] 
     test + " " + am + " " + [I]*/ 

     result = input.get(n-1) + " " + reverseString(input.subList(0, n-1)); 
    }else{ 
     result = input.get(n-1); 
    }    
    return result; 

} 

hoffe, es hilft.

-1
public static void main(String args[]){ 
    String input = "I am test"; 
    String result=""; 
    for(int i=input.length()-1;i>=0;i--){ 
     result=result+input.charAt(i); 
    } 
    System.out.println(result); 
} 
+0

Wenn Sie Ihren Code formatieren, wird es viel besser lesbar und hilfreich für das OP sein – Anton