Java:将整数从最大到最小排序
我需要帮助将整数从最大到最小排序,只使用if语句,而不使用字符串/数组或任何类似的排序。 假设我已经初始化并导入了扫描仪和键盘以允许输入。我遇到的问题是if语句,因为我似乎无法正确地处理它。请帮忙,我在过去的5个小时里一直在努力解决这个问题。谢谢:)Java:将整数从最大到最小排序,java,sorting,if-statement,Java,Sorting,If Statement,我需要帮助将整数从最大到最小排序,只使用if语句,而不使用字符串/数组或任何类似的排序。 假设我已经初始化并导入了扫描仪和键盘以允许输入。我遇到的问题是if语句,因为我似乎无法正确地处理它。请帮忙,我在过去的5个小时里一直在努力解决这个问题。谢谢:) System.out.print(“输入五位整数:”); int FIVENT,digit1,digit2,digit3,digit4,digit5//声明变量 扫描仪键盘=新扫描仪(System.in); fiveInt=keyboard.nex
System.out.print(“输入五位整数:”);
int FIVENT,digit1,digit2,digit3,digit4,digit5//声明变量
扫描仪键盘=新扫描仪(System.in);
fiveInt=keyboard.nextInt()//需要用户输入
System.out.println(“”)//打印空行
//假设输入的数字为12345,将解释以下内容。
//(int)将把除法的任何结果更改为整数。
数字1=(整数)(5/10000)//12345除以10000=1.2345因(int)转换为1。
数字2=((int)(5/1000))-(数字1*10)//12345除以1000=12.345-(1*10)=2.345由于(int)转换为2。
数字3=((int)(5/100))-(数字1*100)-(数字2*10)//12345除以100=123.45-(1*100)-(2*10)=3.45由于(int)转换为3。
数字4=((int)(5/10))-(数字1*1000)-(数字2*100)-(数字3*10)//12345除以10=1234.5-(1*1000)-(2*100)-(3*10)=4.5由于(int)转换为4。
数字5=5维-(数字1*10000)-(数字2*1000)-(数字3*100)-(数字4*10)//12345 - (1*10000) - (2*1000) - (3*100) - (4*10) = 5
System.out.println(“在“+fiveInt+”中的数字是:“+digit1+”、“+digit2+”、“+digit3+”、“+digit4+”、“+digit5”);
System.out.println(“”)//打印空行
//在下面插入代码行的解释。
如果(数字1<数字2){
INTA=数字1;
数字1=数字2;
数字2=数字1;
}
如果(数字1<数字3){
int b=数字1;
数字1=数字3;
数字3=数字1;
}
如果(数字1<数字4){
int c=数字1;
数字1=数字4;
数字4=数字1;
}
如果(数字1<数字5){
int d=数字1;
数字1=数字5;
数字5=数字1;
}
//在此处插入以上代码行的说明。
系统输出打印(“这些数字的最大数字为:“+digit1+digit2+digit3+digit4+digit5”)//显示排序后的数字
第一个错误是您没有还原临时存储在a
、b
、c
中的变量,而不是
if(digit1 < digit2){
int a = digit1;
digit1 = digit2;
digit2 = digit1;
}
不会打印排序的整数,而是一个数字的总和(在您的示例中为15)您需要定义5个项目,如a1、a2、a3、a4、a5,然后找到最大或最小的排序项,并将它们按此顺序排列。基本思想是找到最小数字,然后使该数字无效。不幸的是,这意味着原始数字数据丢失,但您始终可以从用户输入恢复它。int
:
int currentMin;
System.out.print("The largest number with these digits is: ");
while(true) {
currentMin = Math.min(digit1, Math.min(digit2, Math.min(digit3, Math.min(digit4, digit5))));
//Invalidate the min digit
if (currentMin == digit1) digit1 = Integer.MAX_INT;
if (currentMin == digit2) digit2 = Integer.MAX_INT;
if (currentMin == digit3) digit3 = Integer.MAX_INT;
if (currentMin == digit4) digit4 = Integer.MAX_INT;
if (currentMin == digit5) digit5 = Integer.MAX_INT;
if (currentMin == Integer.MAX_INT) {
break;
} else {
System.out.print(currentMin + " ");
}
}
这是对我刚才所写内容的详细阐述。基本上,您必须获得5个整数(a1到a5)并返回其中的排序值。我先找到订单。例如,在以下测试数据中,7是第3项。然后把7和其他的按我提到的从a1到a5的预定义整数的适当顺序排列,然后打印出来
公共B级{
static int a1, a2, a3, a4, a5;
static int digit1=4;
static int digit2=1;
static int digit3=7;
static int digit4=9;
static int digit5=5;
public static void main(String args[]) {
setDigitOrer(digit1, getOrder(digit1, digit2, digit3, digit4, digit5));
setDigitOrer(digit2, getOrder(digit2, digit1, digit3, digit4, digit5));
setDigitOrer(digit3, getOrder(digit3, digit2, digit1, digit4, digit5));
setDigitOrer(digit4, getOrder(digit4, digit2, digit3, digit1, digit5));
setDigitOrer(digit5, getOrder(digit5, digit2, digit3, digit4, digit1));
System.out.println(a1 );
System.out.println(a2 );
System.out.println(a3 );
System.out.println(a4 );
System.out.println(a5 );
}
private static void setDigitOrer(int digit, int digitOrder) {
if (digitOrder == 0){
a1 = digit;
} else if (digitOrder == 1){
a2 = digit;
} else if (digitOrder == 2){
a3 = digit;
} else if (digitOrder == 3){
a4 = digit;
} else if (digitOrder == 4){
a5 = digit;
}
}
private static int getOrder(int digit, int... digits){
int count = 0;
for (int d: digits){
if (d > digit){
count++;
}
}
return count;
}
}
结果是
9
7.
5.
4.
1这绝对是家庭作业,规则也不太清楚。但是,我确信解决方案不包括对Math.min或Math.max方法的4个调用。动动脑筋,查找一些排序算法并尝试实现一个。使用以下小型python程序:
for pos in range(1,5):
for num in range(1,6-pos):
print "if (digit%d < digit%d) {" % (num, num+1)
print "\tSystem.out.println(\"Swapping \"+digit%d+\" and \"+digit%d);" % (num, num+1)
print "\tint temp=digit%d;" % (num)
print "\tdigit%d=digit%d;" % (num, num+1)
print "\tdigit%d=temp;" % (num+1)
print "}"
它会对你的五位数进行排序。基本上,这两个循环都展开了
不要浪费时间手动输入排序语句。计算机确实存在,为我们做那些无聊的工作
if (digit1 < digit2) {
System.out.println("Swapping "+digit1+" and "+digit2);
int temp=digit1;
digit1=digit2;
digit2=temp;
}
if (digit2 < digit3) {
System.out.println("Swapping "+digit2+" and "+digit3);
int temp=digit2;
digit2=digit3;
digit3=temp;
}
...
if(数字1<数字2){
System.out.println(“交换“+digit1+”和“+digit2”);
int temp=数字1;
数字1=数字2;
数字2=温度;
}
如果(数字2<数字3){
System.out.println(“交换“+digit2+”和“+digit3”);
int temp=数字2;
数字2=数字3;
数字3=温度;
}
...
系统输出打印(“输入五位整数:”);
int FIVENT,digit1,digit2,digit3,digit4,digit5;//宣布
//变数
扫描仪键盘=新扫描仪(System.in);
fiveInt=keyboard.nextInt();//需要用户输入
System.out.println(“”;//打印空行
//假设输入的数字为12345,将解释以下内容。
//(int)将把除法的任何结果更改为
//整数。
数字1=(int)(5/10000);//12345除以10000=1.2345
//由于(int)而转换为1。
数字2=((int)(fiveInt/1000))-(数字1*10);//12345除以
// 1000 = 12.345 -
// (1 * 10) = 2.345
//转换2到期
//到(int)。
数字3=((int)(fiveInt/100))-(数字1*100)-(数字2*10);//12345
//分裂
//借
// 100
// =
// 123.45
// -
// (1*100)
static int a1, a2, a3, a4, a5;
static int digit1=4;
static int digit2=1;
static int digit3=7;
static int digit4=9;
static int digit5=5;
public static void main(String args[]) {
setDigitOrer(digit1, getOrder(digit1, digit2, digit3, digit4, digit5));
setDigitOrer(digit2, getOrder(digit2, digit1, digit3, digit4, digit5));
setDigitOrer(digit3, getOrder(digit3, digit2, digit1, digit4, digit5));
setDigitOrer(digit4, getOrder(digit4, digit2, digit3, digit1, digit5));
setDigitOrer(digit5, getOrder(digit5, digit2, digit3, digit4, digit1));
System.out.println(a1 );
System.out.println(a2 );
System.out.println(a3 );
System.out.println(a4 );
System.out.println(a5 );
}
private static void setDigitOrer(int digit, int digitOrder) {
if (digitOrder == 0){
a1 = digit;
} else if (digitOrder == 1){
a2 = digit;
} else if (digitOrder == 2){
a3 = digit;
} else if (digitOrder == 3){
a4 = digit;
} else if (digitOrder == 4){
a5 = digit;
}
}
private static int getOrder(int digit, int... digits){
int count = 0;
for (int d: digits){
if (d > digit){
count++;
}
}
return count;
}
for pos in range(1,5):
for num in range(1,6-pos):
print "if (digit%d < digit%d) {" % (num, num+1)
print "\tSystem.out.println(\"Swapping \"+digit%d+\" and \"+digit%d);" % (num, num+1)
print "\tint temp=digit%d;" % (num)
print "\tdigit%d=digit%d;" % (num, num+1)
print "\tdigit%d=temp;" % (num+1)
print "}"
//Insert explanation for lines of code below here.
if (digit1 < digit2) {
System.out.println("Swapping "+digit1+" and "+digit2);
int temp=digit1;
digit1=digit2;
digit2=temp;
}
if (digit2 < digit3) {
System.out.println("Swapping "+digit2+" and "+digit3);
int temp=digit2;
digit2=digit3;
digit3=temp;
}
...
System.out.print("Enter a five digit integer number: ");
int fiveInt, digit1, digit2, digit3, digit4, digit5; // Declaring
// variables
Scanner keyboard = new Scanner(System.in);
fiveInt = keyboard.nextInt(); // User input will be required
System.out.println(" "); // Prints empty line
// The following will be explained assuming number entered was 12345.
// The (int) will change whatever result of the division taking place to
// an integer.
digit1 = (int) (fiveInt / 10000); // 12345 divided by 10000 = 1.2345
// converted to 1 due to (int).
digit2 = ((int) (fiveInt / 1000)) - (digit1 * 10); // 12345 divided by
// 1000 = 12.345 -
// (1 * 10) = 2.345
// converted 2 due
// to (int).
digit3 = ((int) (fiveInt / 100)) - (digit1 * 100) - (digit2 * 10); // 12345
// divided
// by
// 100
// =
// 123.45
// -
// (1*100)
// -
// (2*10)
// =
// 3.45
// converted
// to
// 3
// due
// to
// (int).
digit4 = ((int) (fiveInt / 10)) - (digit1 * 1000) - (digit2 * 100)
- (digit3 * 10); // 12345 divided by 10 = 1234.5 - (1*1000) -
// (2*100) - (3*10) = 4.5 converted to 4 due
// to (int).
digit5 = fiveInt - (digit1 * 10000) - (digit2 * 1000) - (digit3 * 100)
- (digit4 * 10); // 12345 - (1*10000) - (2*1000) - (3*100) -
// (4*10) = 5
System.out
.println("The digits in " + fiveInt + " are: " + digit1 + ", "
+ digit2 + ", " + digit3 + ", " + digit4 + ", "
+ digit5);
System.out.println(" "); // Prints empty line
// Insert explanation for lines of code below here.
if (digit1 < digit2) {
int a = digit1;
digit1 = digit2;
digit2 = a;
}
if (digit2 < digit3) {
int b = digit2;
digit2 = digit3;
digit3 = b;
}
if (digit3 < digit4) {
int c = digit3;
digit3 = digit4;
digit4 = c;
}
if (digit4 < digit5) {
int d = digit4;
digit4 = digit5;
digit5 = d;
}
// 2nd Filtering
if (digit1 < digit2) {
int a = digit1;
digit1 = digit2;
digit2 = a;
}
if (digit2 < digit3) {
int b = digit2;
digit2 = digit3;
digit3 = b;
}
if (digit3 < digit4) {
int c = digit3;
digit3 = digit4;
digit4 = c;
}
// 3rd Filtering
if (digit1 < digit2) {
int a = digit1;
digit1 = digit2;
digit2 = a;
}
if (digit2 < digit3) {
int b = digit2;
digit2 = digit3;
digit3 = b;
}
// last filtering
if (digit1 < digit2) {
int a = digit1;
digit1 = digit2;
digit2 = a;
}
// Insert explanation for lines of code above here.
System.out.print("The largest number with these digits is: " + digit1
+ digit2 + digit3 + digit4 + digit5); // Displays the digits in
// their sorted mann
public static int main(int n) {
int l, r;
final int size = (int)(Math.log10(n));
for (int i = 0; i < size; i++)
for (int k = i; k < size; k++) {
r = (int)(n/Math.pow(10,k)%10);
l = (int)(n/Math.pow(10,k+1)%10);
if(l < r)
n += Math.pow(10,k)*(l-r) + Math.pow(10,k+1)*(r-l);
}
return n;
}