我正在尝试创建一个像我之前制作的程序;
它只是给出一个布尔值 true/false on 如果一个字符串向后仍然以相同的方式拼写。
我已经使用 if 语句创建了这个,但也很想知道是否可以仅使用方法和循环创建,如果是这样,如何创建?我寻找了重复项,并且有类似的帖子可以实现我在下面所拥有的内容,但是我找到的所有内容都使用if else语句
一如既往地感谢任何帮助;谢谢。
import java.util.*;
public class testingthingsv24 {
private static Scanner in;
public static void main(String args[])
{
in = new Scanner(System.in);
System.out.println("Please Enter Your String: ");
String n=in.nextLine();
System.out.println("Your String Was: "+n);
StringBuffer str=new StringBuffer(n);
StringBuffer str2=new StringBuffer(str.reverse());
String s2=new String(str2);
System.out.println("Reversed Is: "+str2);
if(n.equals(s2))
System.out.println("ITS A PALINDROME");
else
System.out.println("ITS NOT A PALINDROME");
}
}
输出:
Please Enter Your String:
dad
Your String Was: dad
Reversed Is: dad
ITS A PALINDROME
为了测试一个结果,通常一个条件语句(if
、三元或switch
(似乎很有用。
您必须避免使用条件语句,因为这些条件会使代码不可读、脆弱、容易出错等,从而令人讨厌。
要做到这一点,你必须倾向于抽象而不是顺序逻辑。
简单情况下,您可以引入一个结构(键值(,将每个boolean
值与String
消息相关联。
Map<Boolean, String> messageByBoolean = new HashMap<>();
messageByBoolean.put(true, "ITS A PALINDROME");
messageByBoolean.put(false, "ITS NOT A PALINDROME");
...
System.out.println(messageByBoolean.get(n.equals(s2));
但这真的有意义吗?
它看起来像一个开销,因为你只有两种可能性。
有 5 或 10 个,那就很有意义了。
也想知道是否可以仅使用方法和循环创建,如果是,如何创建?
确定。 if
语句在 Java 中是多余的。 该语言中还有许多其他条件,并且有多种方法可以实现if
语句的语义(如果需要,包括 else
子句(,而无需实际使用 if
语句。
例如,您可以随时替换
if (condition) {
// statements when true ...
} else {
// statements when false ...
}
跟
if_replacement: do {
while (condition) {
// statements when true ...
break if_replacement;
}
// statements when false ...
} while (false);
请注意,这与任何特定问题没有任何关联,并且它仅使用循环构造。 如果您不需要else
块的模拟,则可以使用更简单的形式。 原则上,你可以用这种形式的结构替换任何程序中的每个if
。
这实际上无法更有效地实现(例如使用method
或function
(。原因是if-statement
:
if (n.equals(s2))
System.out.println("ITS A PALINDROME");
else
System.out.println("ITS NOT A PALINDROME");
在处理器级别将简单地评估statement
:n.equals(s2)
,true
else
然后切换到第一个println
如果转到第二个println
。如果您考虑这一点,实际上没有任何优化可以做,因为此条件始终必须evaluated
并且始终必须执行必要的任务(printing)
。
但是,话虽如此,这是针对这部分代码的最优化的解决方案,您可以在没有大if-else
的情况下使code
略短且体积更小。
要做到这一点,IMO的最佳解决方案是用ternary
表达@shmosel's
。这会用一个简单的line
替换这个if-else
块:
System.out.println(n.equals(s2) ? "ITS A PALINDROME" : "ITS NOT A PALINDROME");
由于 ternary
语句的一般格式,这是有效的:
condition ? task if true : task if false
也可以用递归来完成
boolean isPalindrome (String s) {
return s.length() < 2 ? true : s.charAt(0) == s.charAt(s.length() - 1) && isPalindrome(s.substring(1,s.length() - 1));
}