编写一个方法提取tOddDigits(),从正数n中提取奇数,并将奇数顺序组合成一个新数字。新数字返回给调用方法。如果输入数字n不包含任何奇数,则返回-1。例如,如果n=1234567,则返回1357;如果n=28,则返回-1。
测试用例:
(1) n : 12345;
(2) n : 54123;
(3) n : 246;
(4) n : -12 (give an error message)
预期产出:
(1) oddDigits = 135;
(2) oddDigits = 513;
(3) oddDigits = -1;
(4) oddDigits = Error input!!
这是我所做的方法,但输出是
(1) oddDigits = 135;
(2) oddDigits = 513;
(3) oddDigits = -1;
(4) oddDigits = -1
最后的输出应该是错误输入!
public static long extractOddDigits(long n){
String output = "";
if(n < 0) // check if negative
{
output = "Error Input!!";
}
if(n % 2 == 0){ //check even
output = "-1";
}
while(n > 0) {
int left = (int) (n % 10);
if(left % 2 != 0)
output = left + output;
n /= 10;
}
System.out.println("oddDigit = " + output);
}
如何检查n是否为负数,然后转到错误输入?
问题是:
当n=-12
时,您正在分配输出
"Error Input!!
"
然后由于也是n%2==0,
您正在将输出
覆盖到“-1
”
另外,你的逻辑——如果n可以被2整除,它就不会有奇数,这是不正确的
首先,仅仅因为数字是偶数,并不意味着它不包含任何奇数。
所以:
if(n % 2 == 0){ //check even
output = "-1";
}
是错误的。您也不需要键入cast the(n%10);
to int。
您可以保留一个布尔变量funOdd
,它跟踪到目前为止我们是否找到了任何奇数位,最后如果它仍然为假,我们可以简单地打印-1。
所以正确的代码是:
int n = 246;
String output="";
boolean foundOdd=false;
if(n < 0) // check if negative
output = "Error Input!!";
else
{
while(n > 0)
{
int left = (n % 10);
if(left % 2 != 0)
{output = left + output; foundOdd = true;}
n /= 10;
}
}
if(foundOdd)
System.out.println("oddDigit = " + output);
else System.out.println(-1);
您的问题是,前两个if
可能会为输出赋值,但不是以独占方式,您可以找到一个负数、偶数和奇数。因此,您必须确保代码隔离了每个选项。
此外,您的要求是,该方法必须返回数字,而不仅仅是打印数字,因此您的方法应该返回long
,而不是void
,但我会把它作为您作业的一部分;)
public static void extractOddDigits(long n){
String output = "";
if(n < 0) {
output = "Error Input!!";
} else {
while(n > 0) {
int left = (int) (n % 10);
if (left % 2 != 0) {
output = left + output;
}
n /= 10;
}
}
if (output.equals("") {
output="-1";
}
System.out.println("oddDigit = " + output);
}
我正在做的一项任务遇到了麻烦。提示如下: 创建一个DigitExtractor应用程序,提示用户输入一个整数(范围:0-999 ),然后显示数字的一位、十位或百位。用户将从菜单中选择他们希望显示的数字。 这个程序需要作为一个类来编写。菜单将是您与该类一起提交的驱动程序,以便您的讲师可以使用它来测试该类。 这是我的代码: 我想我已经基本掌握了,但每次测试都会遇到问题。当我输入一个数字,比如987,然
问题内容: 我想编写一个抽象方法,但编译器始终显示此错误: 抽象方法不能有主体 我有这样的方法: 怎么了 问题答案: 抽象方法意味着没有默认实现,并且实现类将提供详细信息。 本质上,您将拥有 因此,它与错误状态完全相同:您的抽象方法不能具有主体。 在Oracle网站上有完整的教程,网址为:http : //download.oracle.com/javase/tutorial/java/IandI
我试图从ArrayList中删除所有奇数,并且它必须是for或Fore每循环。循环结束后,ArrayList中剩余的数字的结果将7, 90, 55, 60。当我设定一个条件时: 一切工作正常。所有偶数都被删除,但在第一个示例中,奇数的情况并非如此。为什么会发生这种情况?
问题内容: Java 8接口默认方法与抽象类中的非抽象方法-两者之间是否有任何区别(除了iface-类,可见性等不同) 默认方法不是Java的后退一步,是否违反Java多年来宣传的本质? 问题答案: 如果抽象子类的具体子类被super()覆盖,则抽象类中的非抽象方法将被调用。因此,存在多种可能性。如果不重写method,则将执行超类方法。如果我们在具体的子类方法中使用super(),则将执行被超类
Java 8接口默认方法与抽象类中的非抽象方法--两者之间有什么区别吗(除了iface-class、可见性等的区别之外) 默认方法是不是在Java中倒退了一步,意味着它违背了Java多年来宣传的本质?!
问题内容: 我今天看了一些Java代码,发现了一些奇怪的语法: 我以为无法编译,并想解决我认为是错字的问题,但是后来我想起Java编译器确实接受了它! 有人可以帮我理解它的意思吗?它是功能数组吗? 问题答案: 这是一个返回的方法。 Java语言规范(8.4方法声明) 为了与Java平台的较早版本兼容,允许使用返回数组的方法的声明形式(将部分或全部)空括号对放置在参数列表之后,该空括号对构成数组类型