我正在尝试创建一个像我之前制作的程序;
如果向后的字符串仍然以相同的方式拼写,它只会给出一个布尔值true / false。
我使用if语句创建了这个,但是也想知道是否有可能只使用方法和循环创建,如果是这样的话怎么样?我已经找了重复项,并且有类似的帖子可以实现我的目标,但我找到的所有内容都使用 if else statements
任何帮助一如既往的赞赏;感谢。
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
答案 0 :(得分:2)
要测试结果,通常条件语句(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个,这很有意义。
答案 1 :(得分:0)
这无法更有效地实现(如使用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)
然后切换到第一个println
,如果true
else
转到第二个{{} 1}}。如果您考虑到这一点,那么您无法进行任何优化,因为此条件始终必须为println
且始终必须执行必要的任务(evaluated
。
但是,如果说这是代码的这一部分的最优化解决方案,那么printing)
可以使code
稍微缩短,而不会在没有大if-else
的情况下变得笨重。
要做到这一点,IMO的最佳解决方案是@shmosel's
表达式为ternary
。这将使用简单的if-else
:
line
块
System.out.println(n.equals(s2) ? "ITS A PALINDROME" : "ITS NOT A PALINDROME");
由于ternary
语句的一般格式:
condition ? task if true : task if false
答案 2 :(得分:0)
我们也想知道是否有可能只使用方法和循环创建,如果是这样的话?
不确定。 if
语句在Java中是多余的。语言中还有很多其他条件,有多种方法可以实现if
语句的语义(如果需要,包括else
子句)而不实际使用{{1}声明。
例如,您可以随时替换
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
。
答案 3 :(得分:0)
也可以通过递归来完成
HttpClient.SendAsync(