第一次在这里发帖!是的,我只是需要一些帮助这项任务。我们必须读取一个输入文件,对输入文件的一行中的每个字符进行循环,并将该信息存储在char数组中,然后最后编写一个isPalindrome方法并调用它来确定该行是否为回文并将其打印到控制台。
这就是我到目前为止,对不起,如果我没有正确格式化,那有点令人困惑。 我还是个初学者,我不知道自己哪里出错了。我的输出基本上是“[C @ 91bee48不是回文!”一遍又一遍,关于它是否是一个回文。
public class Palindromes {
public static void main(String[] args) {
int k = 0;
try {
Scanner inF = new Scanner(new File("palindromes.txt"));
String aString;
while (inF.hasNextLine()) {
aString = inF.nextLine();
k++;
for (int i = 0; i < k; i++) {
char[] phrases = new char[aString.length()];
if (Character.isLetter(aString.charAt(k))) {
phrases[i] = aString.charAt(i);
}
isPalindrome(phrases);
}
}
}
catch (FileNotFoundException e) {
System.err.println("palindromes.txt not found!");
}
}
public static void isPalindrome(char[] phrases) {
boolean isPalindrome = false;
int i1 = 0;
int i2 = phrases.length - 1;
while (i2 > i1) {
if (phrases[i1] != phrases[i2]) {
isPalindrome = false;
System.out.println(phrases + " is not a palindrome!");
} else {
isPalindrome = true;
System.out.println(phrases + " is a palindrome!");
}
i1++;
i2--;
}
}
}
答案 0 :(得分:3)
使用Arrays.toString()
获取表示数组的字符串。
例如:
System.out.println(Arrays.toString(phrases) + " is not a palindrome!");
否则你得到一个数组对象的默认toString()
- 这不是你想要的。
答案 1 :(得分:0)
while
循环的逻辑错误。这种循环是一种常见的习惯用法:你必须检查一些事情,如果任何检查失败,你希望结果为false
。如果没有检查失败,您希望结果为true
。问题是,在循环完成之前,您无法判断结果是否为true
。您的代码是:
while (i2 > i1)
{
if(phrases[i1] != phrases[i2])
{
isPalindrome = false;
System.out.println(phrases + " is not a palindrome!");
}
else
{
isPalindrome = true;
System.out.println(phrases + " is a palindrome!");
}
i1++;
i2--;
}
问题是你在检查完所有字符之前打印"is a palindrome"
,你不可能知道。编写这种循环的方法是这样的:
isPalindrome = true;
while (i2 > i1)
{
if(phrases[i1] != phrases[i2])
{
isPalindrome = false;
break; // get out of the loop, it's pointless to continue
}
i1++;
i2--;
}
// *** NOW you can check isPalindrome and display your output