Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Sorting_If Statement - Fatal编程技术网

Java:将整数从最大到最小排序

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

我需要帮助将整数从最大到最小排序,只使用if语句,而不使用字符串/数组或任何类似的排序。 假设我已经初始化并导入了扫描仪和键盘以允许输入。我遇到的问题是if语句,因为我似乎无法正确地处理它。请帮忙,我在过去的5个小时里一直在努力解决这个问题。谢谢:)

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