从字符串中获取第二大数字的函数
function to get second largest digit from a string
我必须编写一个函数,它接受字符串和 return 用户输入中第二高的数字作为整数。这些是我必须遵守的规则:
- 没有数字的输入应该return -1
- 只有一个数字的输入应该return -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" 应该 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()
。
我必须编写一个函数,它接受字符串和 return 用户输入中第二高的数字作为整数。这些是我必须遵守的规则:
- 没有数字的输入应该return -1
- 只有一个数字的输入应该return -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" 应该 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()
。