对于我的任务,我必须编写并测试Java程序以进行多次读取 输入行直到读取空行。在读取每一行之后,我必须确定该行是否包含回文,如果它包含回文,我必须打印它是哪种类型的回文(单词,短语或数字)。为了做回文部分,我必须使用伪代码。
伪代码是:
注意:在下面,符号表示作业
左0
右字符串中最后一个字符的位置
好的真的
虽然没事,但离开<右
位于(左)的字符串中的ch1字符
如果ch1不是数字或字母
左递增
否则
位于(右)的字符串中的ch2字符
如果ch2不是数字或字母
减少权利
否则
将ch1和ch2都转换为大写
如果ch1 = ch2
左递增
减少权利
否则
好的假
ENDIF
ENDIF
ENDIF
结束时
返回好吧
到目前为止我所拥有的是:
import java.util.Scanner;
public class Project4
{
public static void main (String [] args)
{
String line = getInputLine();
while (!isEmptyLine (line))
{
if (isPalindrome (line))
System.out.println ("\"" + line + "\" is a palindrome and a " + getPalType (line));
else
System.out.println ("\"" + line + "\" is not a palindrome");
line = getInputLine();
}
System.out.println ("End of program");
}
public static String getInputLine()
{
System.out.println("Enter a line of input: ");
Scanner in = new Scanner(System.in);
String line = in.next();
System.out.println(line);
return line;
}
public static boolean isEmptyLine (String str)
{
boolean isEmptyLine;
if( str == null)
isEmptyLine = true;
else
isEmptyLine = false;
return true;
}
public static boolean isPalindrome (String str)
{
Scanner word = new Scanner(System.in);
String isPalindrome = word.next();
int strLength = isPalindrome.length();
while(true && 0 < isPalindrome.charAt(isPalindrome.length() -1))
{
if(Character.isDigit(strLength) || Character.isLetter(0))
{
我还没有完成它,但我需要帮助了解如何使用伪代码。我不太了解第一个if语句部分。如果有人有时间解释代码,我会非常感激。
答案 0 :(得分:0)
我发现理解伪代码的最好方法就是在开始编写任何代码之前使用一张纸来完成它。写出类似&#34; abcdcba&#34;
的内容使用左右食指左右跟踪变量。你的左手指从最左边的角色开始,你的右手在最后一个角色。现在只需逐步完成说明。
基本思路是将左边的角色与右边的角色进行比较。如果它相同,则向左移动一个位置,向右移动一个位置。重复。
您将在此过程中跳过任何非字母数字字符。字符也会转换为大写,以避免任何区分大小写。
如果左边的角色在任何时候与右边的角色不匹配,那么我们就没有回文。如果左右相遇或相互传递,并且一切都与此相匹配,那么我们确实有一个。
由于您询问了第一个if语句,因此知道Java的Character类提供了
public static boolean isLetterOrDigit(char ch)
你可以使用:
if (! Character.isLetterOrDigit(ch1)) { ...
作为旁注,isEmptyLine()方法始终返回true。整个方法应该重写为:
public static boolean isEmptyLine(String str) {
return (str == null);
}
就此而言,该方法可以完全删除,只需将while循环重写为:
while(line != null) {