2015-05-06 17 views
8

Oto mój kod do drukowania znaków ciągów odwróconych w Javie bez użycia żadnego API. Ale to nie działa poprawnie. Czy ktoś może mi pomóc to poprawić?String słowo reverse w Javie daje zły wynik?

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 + " "); 
     } 
    } 
} 

Podaje wynik "testowy test", a wynik powinien brzmieć "sprawdź czy jestem".

Proszę mi pomóc uzyskać dokładne dane wyjściowe bez użycia wcześniej zdefiniowanych metod lub interfejsów API.

+2

Używasz tam wielu predefiniowanych metod i API: 'length',' charAt', 'println'. Używasz również predefiniowanych operatorów '-','> ',' --', '! =', '+'. Czy możesz wyjaśnić, dlaczego są one dozwolone, a inne nie? A co ważniejsze, jakie masz ograniczenia, które uniemożliwiają korzystanie z predefiniowanych metod i interfejsów API? –

Odpowiedz

14

Istnieją cztery problemy z wdrożenia:

  • Nie przejść całą drogę w dół do zera,
  • można położyć kres linii po każdym wydruku w pętli,
  • Robisz nie drukuj wyniku "tail" po zakończeniu pętli, i
  • Po wyjęciu go w pętlę nie wyczyścisz result.

Naprawienie tych problemów spowoduje uzyskanie prawidłowego wyniku (demo).

+0

Dziękuję, proszę pana, działa dobrze – khanam

4

spróbować

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

proszę obserwować rozwiązanie podane przez dasblinkenlight, – 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

bez użycia podziału. – khanam

+3

Musisz być nieco bardziej przejrzysty ... input.charAt (i) to apk apl –

1

Można spróbować rekursji, jak również -

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; 

} 

nadzieję, że to pomaga.

-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

Jeśli sformatujesz kod, będzie on bardziej czytelny i pomocny w PO – Anton

Powiązane problemy