【发布时间】:2020-08-29 06:48:20
【问题描述】:
我正在尝试确定字符串或整数是否为回文(如果反转,则相同)。我编写了一些方法,但是,当我运行代码时,我的 isPalindromeString() 和 isPalindromeInteger() 方法不断收到错误消息,说这些方法“必须返回布尔类型”。我在方法中有设置子句来根据我的 if 语句返回真/假。不知道我在这里做错了什么。任何指导将不胜感激。谢谢。 PS:我试图不使用任何数组、数据结构和/或类方法。
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
String userInput;
System.out.println("Would you like to enter a string or integer?");
userInput = keyboard.nextLine().toLowerCase();
while(!userInput.equals("string") && !userInput.equals("integer"))
{
System.out.println("Invalid input. Try again. ");
userInput = keyboard.nextLine().toLowerCase();
}
if(userInput.equals("string"))
{
System.out.println("Enter the string now: ");
String s;
s = keyboard.nextLine();
if(isPalindromeString(s))
{
System.out.println("Yes, the string is a palindrome.");
}
else
{
System.out.println("No, the string is not a palindrome.");
System.out.println("The reverse of the string is: " + reverseString(s));
}
}
else if(userInput.equals("integer"))
{
System.out.println("Enter the number now: ");
int i;
i = keyboard.nextInt();
if(isPalindromeInteger(i))
{
System.out.println("Yes, the integer is a palindrome.");
}
else
{
System.out.println("No, the integer is not a palindrome.");
System.out.println("The reverse of the integer is: " + reverseInteger(i));
}
keyboard.nextLine();
}
}
public static boolean isPalindromeInteger(int a)
{
int counter=0;
String s = Integer.toString(a);
int reverseCounter = s.length()-1;
if(isEven(s.length()))
{
while(counter!=(s.length()/2))
{
if(s.charAt(counter)!=s.charAt(reverseCounter))
{
return false;
}
counter++;
reverseCounter--;
}
return true;
}
else if(!isEven(s.length()))
{
while(counter!= (s.length()/2))
{
if(s.charAt(counter)!=s.charAt(reverseCounter))
{
return false;
}
counter++;
reverseCounter--;
}
return true;
}
}
public static boolean isPalindromeString(String s)
{
int counter=0;
int reverseCounter = s.length()-1;
if(isEven(s.length()))
{
while(counter!=(s.length()/2))
{
if(s.charAt(counter)!=s.charAt(reverseCounter))
{
return false;
}
counter++;
reverseCounter--;
}
return true;
}
else if(!isEven(s.length()))
{
while(counter!= (s.length()/2))
{
if(s.charAt(counter)!=s.charAt(reverseCounter))
{
return false;
}
counter++;
reverseCounter--;
}
return true;
}
}
public static int reverseInteger(int a)
{
String s = Integer.toString(a);
String temp = new String();
for(int i = (s.length()-1); i >=0; i--)
{
temp = temp + s.charAt(i);
}
int num = Integer.parseInt(temp);
return num;
}
public static String reverseString(String s)
{
String temp = new String();
for(int i = (s.length()-1); i >=0; i--)
{
temp = temp + s.charAt(i);
}
return temp;
}
public static boolean isEven(int a)
{
if(a % 2 ==0)
return true;
else
return false;
}
【问题讨论】:
-
去除互补条件。如果
isEven(...)为假,则!isEven(...)为真,这对您来说是“显而易见的”;但编译不同意,因为它不知道该方法的输入是否纯正。将else if转换为else。 -
您的代码会出现编译错误。不能是
run。
标签: java boolean reverse palindrome