当前位置: 首页 > 知识库问答 >
问题:

奇数抽取的Java方法

关玮
2023-03-14

编写一个方法提取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是否为负数,然后转到错误输入?

共有3个答案

冯枫
2023-03-14

问题是:

n=-12时,您正在分配输出"Error Input!!"

然后由于也是n%2==0,您正在将输出覆盖到“-1

另外,你的逻辑——如果n可以被2整除,它就不会有奇数,这是不正确的

施飞昂
2023-03-14

首先,仅仅因为数字是偶数,并不意味着它不包含任何奇数。

所以:

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);
洪楚
2023-03-14

您的问题是,前两个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平台的较早版本兼容,允许使用返回数组的方法的声明形式(将部分或全部)空括号对放置在参数列表之后,该空括号对构成数组类型