如何在没有if语句的情况下创建回文检查器

时间:2017-11-16 20:06:29

标签: java

我正在尝试创建一个像我之前制作的程序;

如果向后的字符串仍然以相同的方式拼写,它只会给出一个布尔值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

4 个答案:

答案 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)

这无法更有效地实现(如使用methodfunction)。原因是if-statement

if (n.equals(s2))    
    System.out.println("ITS A PALINDROME");
else
    System.out.println("ITS NOT A PALINDROME");
处理器级别的

只评估statementn.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(