Java 函数从字符串中获取第二大数字

Java 函数从字符串中获取第二大数字,java,math,numbers,digits,Java,Math,Numbers,Digits,我必须编写一个函数,它接受一个字符串并以整数形式返回用户输入中第二高的数字。以下是我必须遵守的规则: 没有数字的输入应返回-1 只有一个数字的输入应返回-1 应忽略非数字字符 每个数字输入都应单独处理,这意味着在出现联合最高数字的情况下,第二高数字也将是最高数字 我的代码: public static int secondDigit(String input) { try { int userInput = Integer.parseInt(input);

我必须编写一个函数,它接受一个字符串并以整数形式返回用户输入中第二高的数字。以下是我必须遵守的规则:

  • 没有数字的输入应返回-1
  • 只有一个数字的输入应返回-1
  • 应忽略非数字字符
  • 每个数字输入都应单独处理,这意味着在出现联合最高数字的情况下,第二高数字也将是最高数字
我的代码:

public static int secondDigit(String input) {

    try {
        int userInput = Integer.parseInt(input);

        char[] array = input.toCharArray();

        int biggest = Integer.MIN_VALUE;
        int secondBiggest = Integer.MIN_VALUE;

        for(int i =0; i < array.length; i++) 
        {
            System.out.println("Array: "+array[i]);

            for(int j = 0; j < array[i]; j++)
            {
                if(array[i] > biggest) 
                {
                    secondBiggest = biggest;
                    biggest = array[i];
                }
                else if(array[i] > secondBiggest && array[i] != biggest)
                {
                    secondBiggest = array[i];
                }
            }

        }

        System.out.println(secondBiggest);

        return userInput;
    }catch(Exception e) {
        System.out.println("-1");

    }
    return -1;
    // Your code goes here
}
公共静态整数第二位(字符串输入){
试一试{
int userInput=Integer.parseInt(输入);
char[]数组=input.toCharArray();
int最大值=Integer.MIN_值;
int secondmaxist=Integer.MIN\u值;
for(int i=0;i最大值)
{
第二大=最大;
最大=数组[i];
}
else if(数组[i]>secondmaxist&&array[i]!=maxist)
{
第二大=数组[i];
}
}
}
System.out.println(第二大);
返回用户输入;
}捕获(例外e){
系统输出打印项次(“-1”);
}
返回-1;
//你的密码在这里
}
“abc:1231234”应返回3
“123123”应返回3


目前这是代码,当我给它输入“123123”时,它返回51。

为什么不编写一个函数来获得第n个最大整数

在数组上迭代,如果找到int,则将其添加到ArrayList。然后使用集合对ArrayList进行排序


现在,您可以通过访问排序后的数组列表的该位置来获取第二大(或第n大)。

您的代码几乎是正确的,唯一的问题是您打印的是该位置的字符,字符是
'3'
,其值为
51
。要解决此问题,您需要。

要将ascii值转换为数值,您可以减去字符“0”的值

int decimalValue = asciiValue - '0';
如果您使用流来解决问题,那么解决方案将非常简洁:

    public static int secondDigit(String input) {
        return input.chars() // Get the Stream from your input
                .filter(i -> i >= '0' && i <= '9')  // Filter non-numeric values
                .boxed()  // Convert to Integer to sort the Stream
                .sorted(Comparator.reverseOrder()) // Sort in descending order
                .skip(1)  // Skip the maximum to get the second value
                .map(i -> i - '0') // Convert the ascii value to decimal
                .findFirst()  // Get the second maximum value
                .orElse(-1);  // If not exists, returns the -1 value
    }
公共静态整数第二位(字符串输入){
return input.chars()//从输入中获取流
.filter(i->i>='0'&&i i-'0')//将ascii值转换为十进制
.findFirst()//获取第二个最大值
.orElse(-1);//如果不存在,则返回-1值
}

我同意luk2302的说法,就像比较字符和整数一样。在这种情况下,如果要将字符转换为整数6,比如说“6”,则应使用
Character.getNumericValue()