编辑:我无法跟踪整数中的第二个大数字,并将其与整数中的第一个数字交换,以使整数成为最大...(例如,如果我有输入,因为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
请帮助我我在哪里出错了...
编辑:添加一个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]);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句