Hoe een string omkeren die al is omgedraaid?

Ik heb een programma gemaakt waarmee een gebruiker een woord, zin of zin kan invoeren en omdraaien en het resultaat weergeven.

Mijn probleem is dat wanneer ik het run, het het omdraait, maar het de woorden omkeert wanneer ik alleen maar de woorden wil behouden zoals ze zijn ingevoerd en ze gewoon omdraaien.

Dit is wat ik momenteel heb

//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
0
Je kunt de omgekeerde methode opnieuw bellen, toch?
toegevoegd de auteur MaxZoom, de bron
Je kunt de omgekeerde methode opnieuw bellen, toch?
toegevoegd de auteur MaxZoom, de bron

12 antwoord

Het is duidelijk een huiswerkvraag, dus ik zal je een duw in de goede richting geven, maar ik zal niet het volledige antwoord geven. U moet één woord per keer omkeren en niet de hele reeks.

U hebt iets nodig dat deze pseudo-code implementeert:

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
}

Als u de documenten leest, ziet u wellicht reverse en breakIntoWords er al voor u, dus u hoeft alleen de juiste methoden aan te roepen.

2
toegevoegd

Het is duidelijk een huiswerkvraag, dus ik zal je een duw in de goede richting geven, maar ik zal niet het volledige antwoord geven. U moet één woord per keer omkeren en niet de hele reeks.

U hebt iets nodig dat deze pseudo-code implementeert:

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
}

Als u de documenten leest, ziet u wellicht reverse en breakIntoWords er al voor u, dus u hoeft alleen de juiste methoden aan te roepen.

2
toegevoegd

De sleutel tot het oplossen van problemen is leren hoe je ze opsplitst in kleinere stukjes die gemakkelijker op te lossen zijn. Dit is een goede probleemoplossende techniek en vormt de kern van de programmering.

Je weet hoe je de letters in een zin omdraait. U wilt de letters in elk woord omdraaien, maar laat de woorden in hun oorspronkelijke volgorde staan. Of, om het op een andere manier te zeggen, wil je:

  1. Splits de zin in afzonderlijke woorden.
  2. Keer elk woord één voor één om.
  3. Combineer de woorden weer samen in een zin.

Hopelijk is elk van deze stappen beter beheersbaar. Als dat niet het geval is, bedenk dan hoe je ze in nog kleinere stappen kunt breken. Bijvoorbeeld, voor # 2 heb je misschien een lus nodig en dan iets in die lus.

2
toegevoegd

De sleutel tot het oplossen van problemen is leren hoe je ze opsplitst in kleinere stukjes die gemakkelijker op te lossen zijn. Dit is een goede probleemoplossende techniek en vormt de kern van de programmering.

Je weet hoe je de letters in een zin omdraait. U wilt de letters in elk woord omdraaien, maar laat de woorden in hun oorspronkelijke volgorde staan. Of, om het op een andere manier te zeggen, wil je:

  1. Splits de zin in afzonderlijke woorden.
  2. Keer elk woord één voor één om.
  3. Combineer de woorden weer samen in een zin.

Hopelijk is elk van deze stappen beter beheersbaar. Als dat niet het geval is, bedenk dan hoe je ze in nog kleinere stappen kunt breken. Bijvoorbeeld, voor # 2 heb je misschien een lus nodig en dan iets in die lus.

2
toegevoegd

Wilt u de woordvolgorde ongedaan maken? In dit geval moet u de invoerreeks splitsen op "".

Om dit te doen, zou je else-block moeten zijn

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);
1
toegevoegd

Wilt u de woordvolgorde ongedaan maken? In dit geval moet u de invoerreeks splitsen op "".

Om dit te doen, zou je else-block moeten zijn

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);
1
toegevoegd

Ik heb je code een beetje aangepast om je probleem op te lossen. Eerst zet ik je omgekeerde logica op een aparte methode

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;

}

Ten tweede heb ik je string in woorden gesplitst (ervan uitgaande dat de woorden gescheiden zijn door eenvoudige spaties)

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

Hier is een uitvoeringsvoorbeeld:

reverse

0
toegevoegd

Ik heb je code een beetje aangepast om je probleem op te lossen. Eerst zet ik je omgekeerde logica op een aparte methode

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;

}

Ten tweede heb ik je string in woorden gesplitst (ervan uitgaande dat de woorden gescheiden zijn door eenvoudige spaties)

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

Hier is een uitvoeringsvoorbeeld:

reverse

0
toegevoegd

Ik zie 2 manieren om hier snel mee om te gaan, zo niet te elegant

  1. eenvoudigste ding om te doen zou zijn om een ​​3e variabele aan te maken die zoiets als String originalWords wordt genoemd en waaraan wordt toegevoegd vanuit stdin in de lus.

  2. Hergebruik de bestaande 'originele' tekenreeks om hetzelfde te doen als hierboven en loop deze vervolgens in een tweede lus in omgekeerde richting.

0
toegevoegd

Ik zie 2 manieren om hier snel mee om te gaan, zo niet te elegant

  1. eenvoudigste ding om te doen zou zijn om een ​​3e variabele aan te maken die zoiets als String originalWords wordt genoemd en waaraan wordt toegevoegd vanuit stdin in de lus.

  2. Hergebruik de bestaande 'originele' tekenreeks om hetzelfde te doen als hierboven en loop deze vervolgens in een tweede lus in omgekeerde richting.

0
toegevoegd

U kunt de invoertekenreeks splitsen in een afzonderlijke reeks woorden en vervolgens elk woord afzonderlijk in de array omkeren.

Raadpleeg dit voor code.

0
toegevoegd

U kunt de invoertekenreeks splitsen in een afzonderlijke reeks woorden en vervolgens elk woord afzonderlijk in de array omkeren.

Raadpleeg dit voor code.

0
toegevoegd