【问题标题】:function to get second largest digit from a string从字符串中获取第二大数字的函数
【发布时间】:2019-11-26 17:58:18
【问题描述】:

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

  • 没有数字的输入应返回 -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
}

"abc:1231234" 应该返回 3
“123123”应该返回 3

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

【问题讨论】:

    标签: java math numbers digits


    【解决方案1】:

    您的代码几乎是正确的,唯一的问题是您打印的是该位置的字符,该字符是'3',并且ascii 的值为51。要解决此问题,您需要parse an int from the char

    【讨论】:

      【解决方案2】:

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

      遍历你的数组,如果你找到一个 int 将它添加到一个 ArrayList。然后使用 Collections 对 ArrayList 进行排序。

      现在,您可以通过访问已排序 ArrayList 的该位置来获取第二大(或 nth-biggest)。

      【讨论】:

        【解决方案3】:

        要将 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
            }
        

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-12-05
            • 2015-02-08
            • 1970-01-01
            • 2013-11-15
            • 2020-02-26
            • 2021-02-10
            相关资源
            最近更新 更多