Java 如何将第一个数字(如果不是数字中的最大数字)与整数中的最大数字交换
编辑:我无法跟踪整数中的第二大数字,并将其与整数中的第一个数字交换,以使整数成为最大的。。。(例如,如果我的输入为Java 如何将第一个数字(如果不是数字中的最大数字)与整数中的最大数字交换,java,algorithm,Java,Algorithm,编辑:我无法跟踪整数中的第二大数字,并将其与整数中的第一个数字交换,以使整数成为最大的。。。(例如,如果我的输入为31548我无法用8交换3,因为我的代码用5交换3并给出51348,然后它再次运行其余部分,然后用8交换并给出我不想要的81345)对于最高位的数字序列,如我的输入为877115755,输出应该忽略前三位数字877,考虑较小的第四位数字1,然后交换下一个7和输出877715155的出现。 public static void main(String[] args) { in
31548
我无法用8交换3,因为我的代码用5交换3并给出51348
,然后它再次运行其余部分,然后用8交换并给出我不想要的81345
)对于最高位的数字序列,如我的输入为877115755,输出应该忽略前三位数字877,考虑较小的第四位数字1,然后交换下一个7和输出877715155的出现。
public static void main(String[] args) {
int value = 621007349;
String number = String.valueOf(value);
int[] arr = new int[number.length()];
int length = (int) (Math.log10(value) + 1);
for (int i = 0; i < length; i++) {
System.out.println("Char at " + number.charAt(i));
arr[i] = number.charAt(i) - '0';
}
int var = 0;
for (int i = 0; i < arr.length; i++) {
int temp = arr[i];
for (int j = i; j < arr.length-1; j++) {
if (j < arr.length - 1) {
if (arr[j + 1] > temp) {
if (var < arr[j + 1]) {
var = arr[j + 1];
System.out.println("Larg Val " + arr[j+1]);
System.out.println("First no "+arr[i]);
int tmp = arr[j+1];
arr[j+1] = arr[i];
arr[i] = tmp;
}
}
}
}
}
for (int j = 0; j < arr.length; j++) {
System.out.println("Values in arry are " + arr[j]);
}
}
publicstaticvoidmain(字符串[]args){
整数值=621007349;
字符串编号=String.valueOf(值);
int[]arr=新int[number.length()];
int长度=(int)(数学log10(值)+1);
for(int i=0;i温度){
if(var
输入是621007349
,输出应该是921007346
请帮助我了解哪里出了问题…您可以尝试,先获得
max
位置,然后进行简单的交换:
public static int get_max(int[] arr){
int max_pos = 0;
int max = Integer.MIN_VALUE;
for (int i = 0; i < arr.length; i++) {
if ( arr[i] > max) {
max = arr[i];
max_pos = i;
}
}
return max_pos;
}
public static void swap(int[] arr, int st, int dt) {
int temp = arr[st];
arr[st] = arr[dt];
arr[dt] = temp;
}
public static void main(String[] args) {
int value = 621007349;
String number = String.valueOf(value);
int[] arr = new int[number.length()];
int length = (int) (Math.log10(value) + 1);
for (int i = 0; i < length; i++) {
System.out.println("Char at " + number.charAt(i));
arr[i] = number.charAt(i) - '0';
}
int pos_max = get_max(arr);
swap(arr, 0, pos_max);
for (int j = 0; j < arr.length; j++) {
System.out.println("Values in arry are " + arr[j]);
}
}
公共静态int get_max(int[]arr){
int max_pos=0;
int max=整数的最小值;
对于(int i=0;i最大值){
max=arr[i];
最大位置=i;
}
}
返回最大位置;
}
公共静态无效交换(int[]arr、int st、int dt){
内部温度=arr[st];
arr[st]=arr[dt];
arr[dt]=温度;
}
公共静态void main(字符串[]args){
整数值=621007349;
字符串编号=String.valueOf(值);
int[]arr=新int[number.length()];
int长度=(int)(数学log10(值)+1);
for(int i=0;i
已更新:如果要以非递增顺序将数字替换为max:
public static int get_max(int[] arr, int stPosition){
int max_pos = 0;
int max = Integer.MIN_VALUE;
for (int i = stPosition; i < arr.length; i++) {
if ( arr[i] > max) {
max = arr[i];
max_pos = i;
}
}
return max_pos;
}
// swap is same
// replace get_max and swap with
for (int i = 0; i < arr.length; i++) {
int pos_max = get_max(arr, i); // gets max from i to arr.length
if (pos_max == i)
continue;
swap(arr, i, pos_max);
}
public static int get_max(int[]arr,int stPosition){
int max_pos=0;
int max=整数的最小值;
对于(int i=stPosition;i最大值){
max=arr[i];
最大位置=i;
}
}
返回最大位置;
}
//交换是一样的
//替换get_max并替换为
对于(int i=0;i
编辑:添加一个while循环,将第一个可能的数字替换为之后的最大数字:
我移除了内部循环并稍微更改了条件(也移除了从循环内部到后循环的交换),现在可以正常工作了:
public static void main (String[] args) throws java.lang.Exception
{
int value = 877115755;
String number = String.valueOf(value);
int[] arr = new int[number.length()];
int length = (int) (Math.log10(value) + 1);
for (int i = 0; i < length; i++) {
arr[i] = number.charAt(i) - '0';
}
int var = arr[0];
int index = 0;
int startIndex = 0;
boolean changed = false;
while(startIndex<arr.length-1){
var = arr[startIndex];
for (int i = startIndex+1; i < arr.length; i++) {
int temp = arr[i];
if (temp > var) {
var = temp;
index = i;
changed = true;
System.out.println("Larg Val "+arr[i]);
}
}
if(changed)
break;
startIndex++;
}
//this is the swap part
int tmp = arr[index];
arr[index] = arr[startIndex];
arr[startIndex] = tmp;
for (int j = 0; j < arr.length; j++) {
System.out.println("Values in arry are " + arr[j]);
}
}
publicstaticvoidmain(字符串[]args)抛出java.lang.Exception
{
整数值=877115755;
字符串编号=String.valueOf(值);
int[]arr=新int[number.length()];
int长度=(int)(数学log10(值)+1);
for(int i=0;i
为什么不使用调试器并逐步检查代码以找出错误的具体位置?您可以用文字描述要实现的目标。对如何实现它进行文本描述。注释你的代码:读者如何知道困难在于设计过程(避免“算法”)还是编码?在对Ali Amiri回答的评论中,您改进了最高数字已经位于最左边位置的数字序列的要求:请更新问题。作为操纵数字的替代方法,请尝试操纵数值,以在前后的十进制表示之间实现相同的效果。(既不更好也不更容易:再做一次练习。)当然灰胡子我会这么做…这对输入820715607不起作用。。。它给出的是不是最大整数的720815607。如果我错了,请纠正我。。。我的观点是,如果在第一个位置有一个最大的数字,代码应该检查第二个数字,如果它是最小的,那么它应该交换,依此类推…你想要递归地交换。。。与820715607-->870215607一样,通过max calculation更正了问题,如果您只想替换第一个数字(使用最高数字(也可以是其本身))现在就可以了。我支持您使用上述代码。。。但是如果m