【问题标题】:How to determine if user's input string is read the same backwards ( palindrome ) JAVA [closed]如何确定用户的输入字符串是否向后读取(回文)JAVA [关闭]
【发布时间】:2020-06-06 16:40:02
【问题描述】:
package com.jetbrains;

import java.util.Objects;
import java.util.Scanner;

public class SA {

    public static void main(String[] args) {

        //scanner object
        Scanner input = new Scanner(System.in);

        //comment 
        System.out.println("Please enter a line of text below:");
        String letters = input.nextLine(); //User's string input

        if (letters.length() < 7) {
            System.out.println("The input is too short.");
        }

        //variables
        int l = letters.length()-5; //where the last 5 characters are located in user's input string
        String answer = letters.substring(l) + letters.substring(2,l) + letters.substring(0, 2); // first 2 & last 5 swapped


        if (letters.length() > 7) {
            System.out.println("Convert to upper cases:"); 
            System.out.println(letters.toUpperCase());

            System.out.println("Swap the first 2 characters with the last 5 characters:"); // Swap
            System.out.println(answer);

            System.out.println("Is it a palindrome?");

            for (int i = (letters.length() - 1); i >= 0; i--) {
                char backwards = (letters.charAt(i));

                for (int n = letters.indexOf(0); n >= 0; n++) {
                    char forwards = (letters.charAt(n));

                    if (Objects.equals(forwards, backwards)) {
                        System.out.println("True");
                        else
                           System.out.println("False");
                    }


                }
            }
        }

    }
}

我尝试通过将 for 循环输出转换为 char 变量来比较用户的输入,但它总是返回 false。我不确定如何解决最后一点,我尝试过做其他事情,但我完全被难住了。我的班级没有学习过 StringBuilder 或 StringBuffer,所以我不能在我的代码中使用它们。任何提示或提示都会非常有帮助,谢谢。

【问题讨论】:

  • 您输入的类型是什么? - 我的意思是它是一个单词还是一个带有单词和空格等的句子。对于不同的输入,验证会有所不同。请澄清。 @dream.light()

标签: java string for-loop palindrome


【解决方案1】:

我已经稍微修改了你的代码以获得正确的结果 -

import java.util.Scanner;

public class StringAnalysis {

    public static void main(String[] args) {

        //Create scanner object
        Scanner input = new Scanner(System.in);

        //Comment to the user
        System.out.println("Please enter a line of text below:");
        String letters = input.nextLine(); //User's string input

        if (letters.length() < 7) {
            System.out.println("The input is too short. No analysis to be performed.");
        }

        //variables
        int l = letters.length() - 5; //States the index number of where the last 5 characters are located in user's input string
        String answer = letters.substring(l) + letters.substring(2, l) + letters.substring(0, 2); // first 2 & last 5 swapped


        if (letters.length() > 7) {
            System.out.println("Analysis #1: Convert to upper cases:"); // Upper case
            System.out.println(letters.toUpperCase());

            System.out.println("Analysis #2: Swap the first 2 characters with the last 5 characters:"); // Swapping
            System.out.println(answer);

            System.out.println("Analysis #3: Is it a palindrome?");


            String backwards = "";
            for (int i = (letters.length() - 1); i >= 0; i--) {
                backwards = backwards + letters.charAt(i);
            }

            if(letters.equalsIgnoreCase(backwards)) {
                System.out.println("True");
            } else {
                System.out.println("False");
            }
        }
    }
}

【讨论】:

    【解决方案2】:

    您在检查回文的第二个循环中遇到问题,我试图解决它,但尽管它会将每个向后的字母与所有向前的字母进行比较,这在逻辑上是错误的,您可以做一些更好的事情:

    System.out.println("Analysis #3: Is it a palindrome?");
            boolean response = true;
            for (int i = 0 ; i < letters.length() ; i++) {
                String backwards = String.valueOf(letters.charAt(i));
                String forwards = String.valueOf(letters.charAt(letters.length()-i-1));
    
                    if(!backwards.equals(forwards)) {
                        response = false;
                    }
    
            }
            System.out.println(response);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      相关资源
      最近更新 更多