J'essaie de créer un programme qui, lorsqu'un utilisateur entre une chaîne à l'aide d'un scanner, la première lettre est déplacée à la fin du mot, puis le mot est épelé à l'envers. Le programme détermine ensuite si vous obtenez le mot d'origine.

Par exemple, si l'utilisateur tape «potato», le programme déplacera «p» vers la fin, et affichera true, car nous obtenons le même mot à l'envers - «otatop».

Exemple de sortie: vous avez entré "BANANA". ANANAB est-il identique à BANANA? Vrai.

Merci d'avance pour toute aide.

Jack

C'est ce que j'ai jusqu'à présent, mais je ne pense pas que cela fonctionne correctement.

public class WordPlay {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        String word;
        String palindrome = "";
        String quit = "quit";


        do {
            System.out.print("Enter a word: ");
            word = scanner.nextLine().toUpperCase();

            int length = word.length();

            for (int i = length - 1; i >= 0; i--) {
                palindrome = palindrome + word.charAt(i);
            }

            if (word.equals(palindrome)) {
                System.out.println("Is the word + palindrome + " same as " + word + "?", true);
            } else {
                System.out.println(false);
            }
        } while (!word.equals(quit));
        System.out.println("Good Bye");     
        scanner.close();

    }

}
1
zetbo 16 nov. 2017 à 17:40

4 réponses

Meilleure réponse

C'est ici.

public static void main(String[] args) {

    // To take input.
    Scanner scan = new Scanner(System.in);

    System.out.print("Enter Word: ");
    String word = scan.next(); // taking the word from user

    // moving first letter to the end.
    String newWord = word.substring(1) + word.charAt(0);

    // reversing the newWord.
    String reversed = new StringBuffer(newWord).reverse().toString();

    // printing output.
    System.out.println("You have entered '"+word+"'. "
            + "Is "+newWord+" same as "+word+"? "
            +reversed.equals(word)+".");

    // closing the input stream.
    scan.close();

}
2
Rehan Javed 16 nov. 2017 à 15:43

J'ai essayé de le coder. Voyez si cela aide à importer java.util.Scanner;

class StringCheck
{
 public static void main(String[] args)
 {
   Scanner sc = new Scanner(System.in);
   String str = new String();
   String tempstr = new String();
   System.out.println("Enter your String ");
   str = sc.next();
   int len = str.length();
//putting first character of str at last of tempstr
for (int i = 1 ; i<len; i++)
{
  tempstr += str.charAt(i);
}
tempstr += str.charAt(0);
//reversing tempstr
char[] tempchar = tempstr.toCharArray();
int j = len-1;
char temp;
for ( int i = 0; i<len/2 ; i++)
{
  if(i<j)
  {
    temp = tempchar[i];
    tempchar[i] = tempchar[j];
    tempchar[j]= temp;
    j--;
  }
  else
  break;
 }
 //reversing completed
 tempstr = new String(tempchar);
 //  System.out.println("the reversed string is "+tempstr);
    if(str.compareTo(tempstr)==0)
   {
     System.out.println("true");
   }
    else
   {
     System.out.println("false");
   }
 }
}
1
Namrata Shukla 16 nov. 2017 à 15:42

C'est très simple avec quelques observations. Votre question est que vous devez déplacer la première dernière à la fin et vérifier inversement si la nouvelle chaîne est la même ou non.

Mon observation:

Pour BANANA, la nouvelle chaîne est ANANAB. Maintenant, inversez la chaîne et vérifiez si la météo est la même que la première. Maintenant, si vous ignorez le premier caractère B, la chaîne sera ANANA. Comme vous devez inverser la chaîne et vérifier que celle-ci est la même que la première, c'est comme un problème palindrome. Car l'entrée BANANA ANANA est palindrome. Nous déplaçons le premier caractère à la fin donc il n'y a aucun impact sur la vérification du palindrome. J'ignore donc le premier caractère et vérifie que le reste est palindrome ou non.

La méthode est comme:

private static boolean getAns(String word) {

        int st = 1;
        int en = word.length() - 1;

        while (st < en) {
            if (word.charAt(en) != word.charAt(st)) {
                return false;
            }
            st++;
            en--;
        }

        return true;
}

La fonction principale est:

public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        System.out.print("Input your String:");
        String word = scanner.nextLine();

        boolean ans = getAns(word);

        System.out.println("You have entered " + word + ". Is " + word.substring(1) + word.charAt(0) + " same as " + word + "? : " + ans + ".");

    }

Le Runtime pour ce problème est n / 2 signifie O (n) et pas de mémoire supplémentaire et d'espace nécessaire,

1
Gautam Chakraborty 16 nov. 2017 à 15:21

Cela marche:

   import java.util.*;

public class HelloWorld{

     public static void main(String []args){
         Scanner scan = new Scanner(System.in);
        String s1 = scan.next();
        char s2 = s1.charAt(0);
        String s3 = s1.substring(1) + s2;
        s3 = new StringBuilder(s3).reverse().toString();
        if(s1.equals(s3))
            System.out.println("They are same");
        else
            System.out.println("They are not the same");

     }
}
1
George Cernat 16 nov. 2017 à 14:53
47332461