JAVA求助 一个关于英文猜字谜的小游戏编程

题目是这样的:【字谜游戏】编写一个程序,需要程序里包含一种method,然后程序需要检查两个英文单词是否是字谜。两个词是字谜是否含有任何顺序相同的字母。{例如,输入“slient”和“listen”两个单词后程序system.out.println出来它们是字谜。}另外还有要求就是method的开头必须要这样:public static boolean isAnagram(String s1, String s2) 这个程序只接受2个单词,输出结果需要显示这两个单词是否是字谜或者是不是。 因为小人实在不会,希望哪位好心人帮助我。跪谢了!下面是英文原题:(Anagrams) Write a program that contains a method that checks whether two words are anagrams. Two words are anagrams if they contain the same letters in any order. For example, "slient" and "listen" are anagrams. The header of the method is as follows: public static boolean isAnagram(String s1, String s2)The program will accept 2 words from the user and display if the pair of words are anagrams or otherwise.

我想了个简单的思路1.既然是单词是否有相同顺序的字母..分解来看 就是2个字母组合是最小的 所以把s1 和 s2 分解成 两个字母的顺序组合就可以了.2.然后比较分解出来的 2个字母组合数组或者集合 有相同的2个字母组合 就返回true 比如: slient 我把它分成==> sl li ie en nt listen ==> li is st te en然后遍历比较 只要 里面有一个 是相同的就跳出======================================import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class riddle {public static boolean isAnagram(String s1,String s2){
boolean flag = false;
List<String> s1list = new ArrayList<String>();
for (int i = 0; i < s1.length()-1; i++) {
s1list.add(s1.substring(i, i+2));
}

List<String> s2list = new ArrayList<String>();
for (int j = 0; j < s2.length()-1; j++) {
s2list.add(s2.substring(j, j+2));
}

for (int i = 0; i < s1list.size(); i++) {
String temp = s1list.get(i);
for (int j = 0; j < s2list.size(); j++) {
String temp2 = s2list.get(j);
if (temp.equals(temp2)) {
flag = true;
break;
}
}
}

return flag;
}

public static void main(String[] args) {

Scanner in = new Scanner(System.in);
System.out.println("请输入第1个单词:");
String s1 = in.next();
System.out.println("请输入第2个单词:");
String s2 = in.next();
boolean result = riddle.isAnagram(s1, s2);
if (result) {
System.out.println("这是个谜语");
}else{
System.out.println("不是谜语");
}
}
} ==========================================运行结果==========================================请输入第1个单词:
slient
请输入第2个单词:
listen
这是个谜语
==========================================对于只输入i和li 或者是 i i 这样的 也是会判断为false我在数组截取那里 做了判断..所以如果是1个字符 是不截取的..所以不会比较不过整体没有优化..应该能优化一下...思路大概就这样
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-01
我也来回答下,思路是从第一个字符串中取出所有可能的连续字符串(大于1个字符),到第二个字符串中进行寻找,只要找到,就说明是字谜,代码如下:public class MyGuess { /**
* @param args
*/
public static void main(String[] args) {
System.out.println(isAnagram("slient", "listen"));
}
public static boolean isAnagram(String s1, String s2) {
if(s1 == null || s2 == null || s1.length() < 2 || s2.length() < 2)
return false;
for(int i = 0; i < s1.length() - 2; i++) {
for(int j = i + 1; j < s1.length() - 1; j++) {
String tmp = s1.substring(i, j + 1);
if(s2.indexOf(tmp) > -1) {
System.out.println("matches:" + tmp);
return true;
}
}
}
return false;
}
}运行结果:
matches:li
true

字谜:东海有条鱼,没头又没尾,抽出脊梁骨,就是这个字,这个字谜是根据什么...
王吉甫不直接说出谜底,而用另一则谜去解:“东海有一鱼,无头亦无尾,更除脊梁骨,便是这个谜。”两位虽然所用制谜手法不同,所猜射的谜底均为“日”字。 王安石是以事物谜的方法制谜,即事物的存在方式和运行规律进行制谜;而王吉甫的制谜方法是纯粹的灯谜制作方法,即以汉字的结构特点来编制。东海有条鱼没头...

相似回答