我正在为Java开发一个程序,教它如何查找嵌入在单词列表文件中的回文列表。我在一个Java入门课程中,所以任何类型的帮助或指导都将非常感谢!
以下是我到目前为止拥有的代码:
import java.util.Scanner;
import java.io.File;
class Palindromes {
public static void main(String[] args) throws Exception {
String pathname = "/users/abrick/resources/american-english-insane";
File dictionary = new File(pathname);
Scanner reader = new Scanner(dictionary);
while (reader.hasNext()) {
String word = reader.nextLine();
for (int i = 0; i > word.length(); i++) {
if (word.charAt(word.indexOf(i) == word.charAt(word.indexOf(i)) - 1) {
System.out.println(word);
}
}
}
}
}
在我要导入的列表中,有3个单词是7个字母或更长。
发布于 2013-04-15 06:58:49
因为这是家庭作业,所以我不会给你提供代码。
当我编写代码时,我做的第一件事就是后退一步,问问自己,
“我想让计算机做什么,我自己也会做什么?”
好的,你得到了这个huuuuge字符串。可能是这样的:"lkasjdfkajsdf adda aksdjfkasdjf ghhg kajsdfkajsdf oopoo“
等等。
字符串的长度要么是奇数,要么是偶数。所以,首先,检查一下。
奇数/偶数将用于计算要读入的字母数。
如果单词是奇数,则读入((length-1)/2)个字符。
如果是偶数(长度/2)个字符。
然后,将这些字符与最后一个字符进行比较。请注意,对于奇数长度的字符串,您需要跳过中间字符。而不是像上面那样,先检查第一个和第二个字符,然后检查第二个和第三个字符,然后检查第三个和第四个字符,从前面到后面检查,如下所示。
while (reader.hasNext()) {
String word = reader.nextLine();
boolean checker = true;
for (int i = 0; i < word.length(); i++) {
if(word.length()<2){return;}
if (word.charAt(i) != word.charAt(word.length()-i) {
checker = false;
}
}
if(checker == true)
{System.out.println(word);}
}
发布于 2013-04-15 06:59:34
我假设你是以字符串的形式读取的。使用string.toCharArray()
将每个字符串转换为char[]。使用for循环遍历字符数组,如下所示:在迭代1中,如果第一个字符等于最后一个字符,则继续进行下一次迭代,否则返回false。在迭代2中,如果第二个字符等于倒数第二个字符,则继续进行下一次迭代,否则返回false。依此类推,直到到达字符串的中间,此时返回true。注意off-by-1错误;有些字符串的长度是偶数,有些字符串的长度是奇数。
如果您的回文检查器不区分大小写,则使用string.toLowerCase().toCharArray()
预处理字符数组。
可以在for循环中使用string.charAt(i)
而不是string.toCharArray()
;在这种情况下,如果回文检查器不区分大小写,则使用string = string.toLowerCase()
预处理字符串
发布于 2013-04-15 07:02:35
让我们将问题分解:最后,您将检查单词的反转是否等于单词。我假设您已经将所有单词存储在一个名为wordArray[]
的数组中。
我有一些代码来获得单词的反面(从here复制):
public String reverse(String str) {
if ((null == str) || (str.length() <= 1)) {
return str;
}
return new StringBuffer(str).reverse().toString();
}
所以,现在我们只需要在每个单词上调用它。所以:
for(int count = 0; count<wordArray.length;count++) {
String currentWord = wordArray[count];
if(currentWord.equals(reverse(currentWord)) {
//it's a palendrome, do something
}
}
https://stackoverflow.com/questions/16005295
复制相似问题