[英]How to reverse a string that has already been reversed?
我制作了一個程序,允許用戶輸入單詞或短語或句子,然后將其取反並顯示結果。
我的問題是,當我運行它時,它的確會反轉它,但是當我想要做的就是將輸入的詞保持原樣並將其反轉時,它會將詞反轉。
這是我目前所擁有的
//import statements
import java.util.*; //for scanner class
// class beginning
class WordReverser {
public static void main(String[] args ) {
//Declare variables area
String original, reverse = "";
Scanner in = new Scanner(System.in);
boolean blankString = false;
public StringBuilder reverse();
// beginning message to user to explain the program
System.out.println("Welcome to my reverse word program!");
System.out.println("Please enter in a word or a phrase and see it reversed: ");
//main code and calculations to do
while (!blankString){
System.out.println("Enter a string to reverse");//Collect inputs from user.
original = in.nextLine();
if (original.equals(""))
{
blankString = true ;
}
else {
int length = original.length();
for ( int i = length - 1 ; i >= 0 ; i-- )
reverse = reverse + original.charAt(i);
System.out.println("Reverse of entered string is: "+reverse);//Output results here
}
}
//End program message
System.out.println();
System.out.println("Hope you enjoyed using this program!");
}// end main method
}// end class
顯然,這是一個家庭作業問題,因此,我會向您推薦正確的方法,但我不會給出完整的答案。 您需要一次反向一個單詞,而不是整個字符串。
您需要一些實現此偽代碼的東西:
original = getStringFromUser();
words[] = breakIntoWords(original);
foreach word in words {
reversed = reverse(word);
print reversed;
}
reverse(string word)
{
return reversed version of the input
}
breakIntoWords(sting sentence)
{
return array with each word as a sep.element
}
如果您閱讀這些文檔,可能會發現reverse
和breakIntoWords
已經存在,因此您只需要調用正確的方法即可。
解決問題的關鍵是學習如何將問題分解為更容易解決的小問題。 這是一種很好的解決問題的技術,並且是編程的核心。
您知道如何顛倒句子中的字母。 您想顛倒每個單詞中的字母,但保留單詞的原始順序。 或者,換句話說,您想要:
希望每個步驟都更易於管理。 如果沒有,請考慮如何將它們分解為更小的步驟。 例如,對於#2,您可能需要一個循環,然后在該循環內進行操作。
您要顛倒單詞順序嗎? 在這種情況下,您必須在“”處分割輸入字符串。
為此,您的else-block應該是
String[] words = original.split(" ");
for(int i = words.length-1; i>=0; i--)
reverse += words[i] + " ";
System.out.println("Reverse of entered string is: "+reverse);
如果不是太優雅,我會看到兩種快速處理此問題的方法
最簡單的方法是創建一個名為String OriginalWords之類的第3個變量,該變量將從循環中的stdin附加到該變量。
重用現有的“原始”字符串以執行與上述相同的操作,然后在第二個循環中反向循環。
您可以將輸入字符串拆分為單獨的單詞數組,然后分別反轉該數組中的每個單詞。
我對您的代碼進行了一些重構以解決您的問題。 首先,我將反向邏輯放在單獨的方法中
public static String reverse(String strToReverse) {
String original = strToReverse, reverse = "";
boolean blankString = false;
if (original.equals(""))
{
blankString = true ;
}
else {
int length = original.length();
for ( int i = length - 1 ; i >= 0 ; i-- )
reverse = reverse + original.charAt(i);
}
return reverse;
}
其次,我將您的字符串拆分為單詞(假設單詞之間用簡單的空格隔開)
public static void main(String[] args ) {
//Declare variables area
String original, reverse = "";
Scanner in = new Scanner(System.in);
boolean blankString = false;
//public StringBuilder reverse();
// beginning message to user to explain the program
System.out.println("Welcome to my reverse word program!");
System.out.println("Please enter in a word or a phrase and see it reversed: ");
//main code and calculations to do
while (!blankString){
System.out.println("Enter a string to reverse");//Collect inputs from user.
original = in.nextLine();
if (original.equals(""))
{
blankString = true ;
}
else {
String[] words = original.split(" ");
String[] reversedWords = new String[words.length];
StringBuilder reverseBuilder = new StringBuilder();
for (int index = 0; index < words.length; index++) {
reversedWords[index] = reverse(words[index]);
reverseBuilder.append(reversedWords[index] + " ");
}
System.out.println("Reverse of entered string is: "+reverseBuilder.toString());//Output results here
}
}
//End program message
System.out.println();
System.out.println("Hope you enjoyed using this program!");
}// end main method
這是一個執行示例:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.