我必须根据用户输入的0,1,2,3,4,5,6,7,8,9的序列找到找到下一个最大数字的解决方案。
例如用户输入
5647382901
然后我的功能必须将其更改为
5647382910
我的下面的代码用临时字符K替换了我的最后2位数字,但是我需要它来替换最后一位数字。请让我知道我做错了什么?
import java.util.*;
public class NextLargest {
int a = 100;
public static void nextLargest(String a){
long newNumber = Long.valueOf(a);
int last = (int)(newNumber%10);
int lastByOne = (int)(newNumber/10)%10;
if(last > lastByOne){
char k = a.charAt(a.length()-2); // 0
a = a.replace(a.charAt(a.length()-2),a.charAt(a.length() -1) ); // 5647382911
System.out.println(b); // 5647382911
a = a.replace(a.charAt(a.length()-1),k);
System.out.println(a);
}
System.out.println(a);
System.out.println(last);
System.out.println(lastByOne);
}
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("Please enter the number");
String number = scan.next();
nextLargest(number);
}
}
答案 0 :(得分:0)
替换方法的问题在于,它会使用您的新字符更改旧字符的所有出现,这就是为什么您无法使用此解决方案切换最后2位数字:
long newNumber = Long.valueOf(a);
int last = (int)(newNumber%10);
int lastByOne = (int)(newNumber/10)%10;
if(last > lastByOne){
newNumber= newNumber - lastByOne*9 + last*9 ;
}
System.out.println("!!!!!!!!!!!!!!!! my final number :"+newNumber);
a = String.valueOf(newNumber);
System.out.println("!!!!!!!!!!!!!!!! my final number :"+a);
}