【发布时间】:2020-11-13 07:14:00
【问题描述】:
这个任务是一个单词是否是回文,我用的是java 11。
在输入带有空格的单词后,代码会给我一个答案,但是如果我选择 word = sc.next(),则循环中断并且代码“以退出代码 0 结束”。但是如果我写word = sc.nextLine() - 它执行得很好并再次开始循环。
我不明白为什么,因为我无法调试这部分代码,它只是被跳过了。我不明白为什么会这样。那么有人可以向我解释我做错了什么吗?
也许有办法避免这些空格?
附:我是编程新手。谢谢大家。
try {
Pattern pattern = Pattern.compile("[Y|y][E|e][S|s]");
while (true) {
String word = "";
Scanner sc = new Scanner(System.in);
System.out.println("Enter the word without spaces");
if (sc.hasNext("(?>\\p{Alpha})+")) {
word = sc.next();
System.out.println(word);
System.out.println("The word is correct");
String text2;
StringBuilder sb = new StringBuilder();
text2 = sb.append(word).reverse().toString();
if (word.equalsIgnoreCase(text2)) {
System.out.println("Yes, it's a palindrome." + " " + "Want to try another one?");
System.out.println("Enter yes if you want to continue" + " or " + "enter any symbol if no");
if (sc.hasNext(pattern)) {
}
else {
break;
}
}
else {
System.out.println("No, it's not a palindrome." + " " + "Want to try another one?");
System.out.println("Enter yes if you want to continue" + " or " + "enter any symbol if no");
if (sc.hasNext(pattern)) {
}
else {
break;
}
}
}
else {
word = sc.next();
System.out.println("It's not a word");
System.out.println("Want to try another one?");
System.out.println("Enter yes if you want to continue" + " or " + "enter any symbol if no");
if (sc.hasNext(pattern)) {
}
else {
break;
}
}
}
}
catch (NoSuchElementException ex) {
System.out.println(ex.getMessage());
}
}
【问题讨论】:
-
嗨!您在这里放置了太多代码。您应该缩小您遇到的具体问题的范围。只要看看你的第一句话,sc.nextLine(),就会看到换行符。所以这可能是其中的一部分。另外关于您的 reg ex 解决方案。我不认为这是解决它的最简单方法。你为什么用 reg ex 做呢?
-
你为什么要做 -> (sc.hasNext(pattern)) 而不仅仅是 sc.next?我也不明白。
-
我需要“模式”作为决定人是否想尝试生词的结果。那么正则表达式呢 - 我可以创建新的“如果”来测试单词是否带有空格并决定如何处理它,继续与否。也许会有所帮助。
-
@GamingFelix 是对的。你不需要
sc.hasNext(pattern)和这么复杂的代码。如果您对编程很认真,则应尽一切努力使您的代码保持简单。
标签: java regex java.util.scanner