Java Fencepost/While 循环条件测试简介
Posted
技术标签:
【中文标题】Java Fencepost/While 循环条件测试简介【英文标题】:Intro Java Fencepost/While loops Conitional Tests 【发布时间】:2015-07-19 02:36:59 【问题描述】:我整晚都在试图回答这个问题,但我认为我的大脑在期中考试中太煎熬了,无法正确回答。所以这个问题正是[引用]: 编写一个方法 highLow,它接受一个整数作为参数并返回该数字是否具有交替的“高”和“低”数字。 0 到 4 是“低”位,5 到 9 是“高”位。如果传递的数字在“高”和“低”数字之间交替,您的方法应该返回 true,否则返回 false。您可以假设传递的数字是正数。如果传递的数字由单个数字组成,则您的方法应返回 true。
注意:如果数字交替以“高”数字开头或以“低”数字开头,则该方法返回 true。重要的是数字交替。例如,highLow(9292) 和 highLow(2929) 都应该返回 true。
以下是对该方法的一些示例调用及其结果返回值:
调用值返回 高低(1918193)真 高低(7283)真 高低(3827)真 高低(9388)假 高低(895151)假 高低(707)真 高低(44)假 高低(45)真 高低(5)真 你可能不会使用字符串来解决这个问题
这是我最近的尝试:
public class Practeese
public static void main(String[] args)
highLow(1918193);
highLow(7283);
highLow(3827);;
highLow(9388);
highLow(895151);
highLow(707);
highLow(44);
highLow(45);
highLow(5);
public static boolean highLow(int n)
// boolean isHigh = true;
// boolean isLow = true;
boolean test = true;
while (n > 0)
boolean isHigh = true;
boolean isLow = true;
if (n % 10 >= 5)
isHigh = true;
else if (n%10<=5)
isLow = true;
else
return false;
n = n / 10;
if (n % 10 == 0 && (isLow!= isHigh))
test = true;
else
test = false;
return test;
我知道这是一个围栏式的问题,但我似乎可以解决它。任何帮助表示赞赏。
【问题讨论】:
【参考方案1】:您只需达到 false 一次,然后就可以返回 - 因为其他数字无关紧要。您还需要检查结果是否为真 - 与之前的数字相比。所以你可以这样做:
public static boolean highLow(int n)
boolean isLastHigh= n % 10 >= 5 ; //First number check - we don't compare it to anything
n=n/10;
// Start checking the next numbers and see if they are high-low-high-low
// if the condition is not met - return false and stop checking. Otherwise keep going
while (n > 0)
if (n % 10 >= 5)
if(isLastHigh)
return false; //Two highs in a row
isLastHigh = true;
else
if(!isLastHigh)
return false; //Two lows in a row
isLastHigh = false;
n = n / 10;
return true; //We never returned false so all numbers until now have been high-low-high and the result is true
【讨论】:
【参考方案2】:这对我有用
public class Practeese
public static void main(String[] args)
System.out.println(highLow(1918193));
System.out.println(highLow(7283));
System.out.println(highLow(3827));
System.out.println(highLow(9388));
System.out.println(highLow(895151));
System.out.println(highLow(707));
System.out.println(highLow(44));
System.out.println(highLow(45));
System.out.println(highLow(5));
public static boolean highLow(int n)
boolean high = false;
boolean low = false;
while (n > 0)
if(n % 10 >= 5)
if(high)
return false;
else
low = false;
high = true;
else
if(low)
return false;
else
high = false;
low = true;
n = n / 10;
return true;
输出: 真的 真的 真的 错误的 错误的 真的 错误的 真的 真的
【讨论】:
谢谢!那是一个实际的期中问题,最终变得非常容易;至少比这容易。我试图投票,但我还没有这些特权。以上是关于Java Fencepost/While 循环条件测试简介的主要内容,如果未能解决你的问题,请参考以下文章