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

function to get second largest digit from a string

我必须编写一个函数,它接受字符串和 return 用户输入中第二高的数字作为整数。这些是我必须遵守的规则:

我的代码:

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
}

"abc:1231234" 应该 return 3
“123123”应该 return 3

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

为什么不直接写一个函数来获取第n大的整数呢?

迭代你的数组,如果你找到一个 int 将它添加到 ArrayList。然后使用 Collections.

对 ArrayList 进行排序

现在,您可以通过访问已排序的 ArrayList 的那个位置来获取第二大(或第 n 大)。

你的代码几乎正确,唯一的问题是你打印的是那个位置的字符,字符是'3'并且有一个ascii value of 51. To fix this you need to parse an int from the char.

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

int decimalValue = asciiValue - '0';

如果你用Stream来解决你的问题,解决方案会非常简洁:

    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
    }

我同意 luk2302 就好像你比较一个 char 和一个 int。在这种情况下,如果要将“6”转换为整数 6,则应使用 Character.getNumericValue()