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()