在不使用if/loops的情况下转换此java方法

在不使用if/loops的情况下转换此java方法,java,Java,在不使用if/loops的情况下转换以下内容。您仍然可以使用递归、&&、| |等 我想要一些提示。 但我一直在尝试 我们知道true&&false==false并且只有true&&true==true 所以我们必须有这个 return (n%10 == 7) && .... 然后对于第二部分,我们可以得到真或假,如果第二部分是真的,那么我们的第一部分是真的将导致一切都是真的,所以我在想 return (n%10 == 7) && ... 但我认为一个问题可能是

在不使用if/loops的情况下转换以下内容。您仍然可以使用递归、&&、| |等

我想要一些提示。

但我一直在尝试

我们知道
true&&false==false
并且只有
true&&true==true

所以我们必须有这个

return (n%10 == 7) && ....
然后对于第二部分,我们可以得到真或假,如果第二部分是真的,那么我们的第一部分是真的将导致一切都是真的,所以我在想

return (n%10 == 7) && ...

但我认为一个问题可能是,如果n%10不是7,那么bat一切都是错误的。

有很多方法:但给你一个开始:

if(n == 0){
  return false;
}
if(n%10 == 7){
  return true;
}
  return mystery(n/10)

}
相当于

return n==0 ? false : n%10==7 ? true : mystery(n/10);
return n!=0 ? n%10==7 ? true : mystery(n/10): false;
return n!=0 && n%10!=7 ? mystery(n/10) : n!=0;
相当于

return n==0 ? false : n%10==7 ? true : mystery(n/10);
return n!=0 ? n%10==7 ? true : mystery(n/10): false;
return n!=0 && n%10!=7 ? mystery(n/10) : n!=0;
相当于

return n==0 ? false : n%10==7 ? true : mystery(n/10);
return n!=0 ? n%10==7 ? true : mystery(n/10): false;
return n!=0 && n%10!=7 ? mystery(n/10) : n!=0;

在我看来,三元运算符在很大程度上仍然是一个“if”语句——但这成为了一个语义争论。你可以完全避免使用它

return (n % 10 == 7) || (n != 0 && mystery(n/10));

这是一个需要解决的有趣的活动。解决方案如下,并提供10k测试证明
mystery2
是您感兴趣的方法

我是如何得到解决方案的:

开始打印从0到100的结果并识别模式-发现以7开头或结尾的结果将返回true,而所有其他结果将返回false。与零比较的第一个if块实际上是所有不符合任何位置的提醒7规则的数字所遇到的。因此,提醒7是获得真实结果的唯一条件,其他所有内容都将进入递归,直到单元位置完成后它变为0。需要等于0,因为我们应该有一个结束递归(或以StackOverflowException结束)的条件

publicstaticvoidmain(字符串[]args){

对于(int i=0;iyou可以使用三元表达式的第二部分包含另一个三元表达式
返回conittion?true:condition?true:false;
让我猜一下:您的类一直在研究条件运算符(
?:
,有时称为“三元运算符”,虽然从技术上讲它只是一个三元运算符)最近…
return n>=0&&Integer.toString(n).contains(“7”);
这里有一个提示-我很确定您可以使用OR(| |)来检查前两个语句,但您可能必须否定(!)还有一些。希望它有帮助!@DavidWallace不需要
n>=0
。这是作为递归终止包含在代码中的。你能解释一下你是如何推导出来的吗?当然。首先,如果n%10等于7,你希望代码立即返回true-因此如果第一条语句为true,OR的第二部分将不会被计算(因为整个表达式随后被保证为true)。否则,如果n等于零,AND的第一部分将返回false,而第二部分将不被计算(因为表达式随后被保证为false)。如果n不为零,则该方法将再次递归调用自身。这有意义吗?