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

比较整数并从给定整数的位数中创建尽可能小的整数

柳正志
2023-03-14

我需要编写以下方法:接受两个整数参数并返回一个整数。如果任一整数不是4位数,则该方法应返回较小的整数。否则,该方法应该返回一个由千位、百位、十位和一位中的最小数字组成的四位整数。我们不能将整数转换成字符串,也不能使用列表或数组

例如大输家(6712,1234)返回1212例如大输家(19,8918)返回19

我是这样开始写的:

public static int biggestLoser(int a, int b){
    if(a<9999 || b<9999){
        if(a<b)
            return a;
        else if(b<a)
            return b;
    }
    int at=a/1000;
    int ah=a%1000/100;
    int an=a%100/10;
    int ae=a%10;
    int bt=b/1000;
    int bh=b%1000/100;
    int bn=b%100/10;
    int be=a%10;
    if(at<bt && ah<bh && an<bn && ae<be)
        return at*1000+ah*100+an*10+ae;
    else if(at<bt && ah<bh && an<bn && be<ae)
        return at*1000+ah*100+an*10+be;
    else if(at<bt&& ah<bh && bn<an && ae<be)
    else return at*1000+ah*100+bn*10+ae;

然而,看起来我将不得不编写太多的if语句,有没有一种更短的方法来编写代码?

共有3个答案

通寂离
2023-03-14

使用StringStringBuilder

public class Test
{

 public static void main(String []args)
 {
    System.out.println(biggestLooser(6712,1234));
 }
 public static int biggestLooser(int _a, int _b)
 {
     String a = String.valueOf(_a);
     String b = String.valueOf(_b);
     StringBuilder c = new StringBuilder();

     if(a.length() < b.length()) return Integer.parseInt(a);
     else if(b.length() < a.length()) return Integer.parseInt(b);
     else if(a.length() >= 4 && b.length() >= 4)
     {
        for(int i = 4; i > 0; i--)
        {
            char ch = '\0';
            if(a.charAt(a.length() - i) < b.charAt(b.length() - i))
                ch = a.charAt(a.length() - i);
            else ch = b.charAt(b.length() - i);
            c.append(ch);
        }
        return Integer.parseInt(c.toString());
     }
     else return -1;
 }
}
//ouput: 1212
吴才俊
2023-03-14

也许这很愚蠢,但尝试利用String(.charAt(int-index))和Integer(.parseInt(String-value))方法,也许这个示例可以帮助您:

    int x=145;
    int y=826;
    //to know which number have the biggest tens 
    String a=x+"";
    String b=y+"";

    if(Integer.parseInt(a.charAt(1)+"")>Integer.parseInt(b.charAt(1)+""))
    {
        System.out.println("The number which have the biggest tens is "+a);
    }
    else
    {
        System.out.println("The number which have the biggest tens is "+b);
    }
赏航
2023-03-14
public static int biggestLoser(int a, int b) {
    if (a < 1000 || a >= 10000 || b < 1000 || b >= 10000) {
        return Math.min(a, b);
    } else {
        // both a and b are four digits
        int result = 0 ;
        int multiplier = 1 ;

        for (int digit = 0; digit < 4; digit++) {
            int nextDigit = Math.min(a % 10, b % 10);
            result = result + nextDigit * multiplier  ;
            multiplier = multiplier * 10 ;
            a = a / 10 ;
            b = b / 10 ;
        }

        return result ;
    }
}

这是怎么回事<当a除以10时,code>a%10是余数:换句话说,它是a的最低有效位(“一位”)。

a=a/10执行整数除法,因此它将a除以10,并忽略任何分数。因此,1234变成了123,在下一次迭代中,123变成了12,等等。换句话说,它丢弃了“一个位置”。

因此,在第一次循环中,您查看ab中的“一”,找到最小的一个,并将其添加到结果中。然后从ab中删除“一”。所以过去的“十”现在变成了“一”。第二次循环时,你又得到了最小的“一”:但这本来是最小的“十”。您想将其添加到结果,但需要乘以10。这是乘数:每次通过循环,乘数都会乘以10。所以每次,你都会得到最小的“一”,乘以正确的东西,加上结果,然后从ab中删除“一”。

只是为了好玩,这里有一个只需要一个语句的实现(如果您将“四位数”替换为任何正数位数,它就可以工作)。你可以让你的老师解释一下;)。

public static final int NUM_DIGITS = 4 ;
public static final int MAX = (int) Math.pow(10, NUM_DIGITS) ;
public static final int MIN = MAX / 10 ;


public static int biggestLoser(int a, int b) {
    return (a < MIN || a >= MAX || b < MIN || b >= MAX) ? Math.min(a, b) :
        IntStream.iterate(1, multiplier -> multiplier * 10).limit(NUM_DIGITS)
            .map(multiplier -> Math.min((a / multiplier) % 10, (b / multiplier) % 10) * multiplier )
            .sum();
}

 类似资料:
  • 问题内容: 在Java中整数比较是棘手的,因为和表现不同。我明白了。 但是,如本示例程序所示, (第4行)的 行为不同于 (第3行) 。为什么是这样?? 结果 问题答案: 从JLS 如果装箱的值p为true,false,字节或\ u0000到\ u007f范围内的char或-128到127(含)之间的整数或短数,则令r1和r2为p的任何两次拳击转换。r1 == r2总是这样。 理想情况下,将给定的

  • 问题内容: 我是Java的新手,我刚刚读了一个整数类的变量,可以用API的三种不同方式来描述。我有以下代码: 这是在循环内,只是输出。 我的目标是弄清楚如何查看整数值。 我知道这是正确的方法吗?还是它? 我知道这是不正确的。这是正确的吗?是否存在值比较运算符? 问题答案: 整数是自动拆箱的,因此您可以执行

  • 我是泛型新手,想解决一个小问题。 我想给两个类型为“V扩展可比”的对象给类ComparePredicate,然后检查方法“isOk”,如果树类的int值“值”在这两个对象之间。我选择了comareTo方法,因为整数和V应该是可比较的类型,但是编译器给出了一个错误。我认为这只是一个句法问题。 那么,我需要如何正确地书写它呢。希望你们能帮我。谢谢你的回答。 类比较谓词 类树

  • 嗨,我需要打印我的最高工资的人的方法。我有女巫雇员和女巫学生名单。当学生的平均成绩在4.5分以上时,他可以得到500英镑的薪水。 我有这样方法: 这是Person类: 这是学生课堂: 我需要的方法为最好的支付的人和方法总和所有人的收入。

  • 上述情况导致 上述条件返回。 为什么会这样?这些片段之间有什么区别?

  • 问题内容: 我正在尝试编写代码以比较两个数组。在第一个数组中,我输入了自己的数字,但是在第二个数组中,输入了输入文件中的数字。该数组的大小由文件中的第一个数字确定,而第一个数组的大小始终为10。两个数组以及数字的长度必须相同。 我的代码如下: 问题答案: