Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将第一个数字(如果不是数字中的最大数字)与整数中的最大数字交换_Java_Algorithm - Fatal编程技术网

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