如何将第一个数字(如果不是最大的数字)与整数中的最大数字交换

how to swap the first digit(if not largest among the digits) with largest digit in an integer

编辑:我无法跟踪整数中的第二大数字并将其与整数中的第一个数字交换以使整数最大...(例如,如果我的输入为 31548 我无法将 3 与 8 交换,因为我的代码将 3 与 5 交换并给出 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]);
    }
}

输入为 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]);
    }
}

已更新:如果要以非递增的顺序将数字替换为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);
}

编辑: 添加一个 while 循环以将第一个可能的数字替换为之后的最大数字:

我删除了内部循环并稍微更改了条件(也删除了从循环内部到循环后的交换),现在 your code 工作正常:

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]);
    }
}