使用Java实现repeat/until算法

使用Java实现repeat/until算法,java,arrays,algorithm,Java,Arrays,Algorithm,请帮助我模拟此算法: 给定数组[5 3 1 9 8 2 4 7],假设l=0 我将其转换为代码: public class Test { public static void main(String[] args) { int[] a = {5,3,1,9,8,2,4,7}; int l = 0; int p = a[l]; int i=l; int j = 8; do{ do{ i++;

请帮助我模拟此算法:

给定数组[5 3 1 9 8 2 4 7],假设l=0

我将其转换为代码:

public class Test {



public static void main(String[] args) {
    int[] a = {5,3,1,9,8,2,4,7};
    int l = 0;
    int p = a[l];

    int i=l;

    int j = 8;
    do{
        do{
            i++;
            System.out.println("Value of i " + i);

        }while(a[i]>=p);
        do{
            j--;
            System.out.println("\nValue of j " + j);

        }while(a[j]<p);
        swap(a,i,j);
        System.out.println("\nSwapped! a[i] = " + a[i] + " a[j] = " + a[j]);
        System.out.println("Swap 1");
        for(int k : a){
            System.out.print(k + " ");

        }

    }while(i>=j);
    if(i>=j){
        swap(a,i,j);
        System.out.println("\nSwapped! a[i] = " + a[i] + " a[j] = " + a[j]);
        System.out.println("Swap 2");
        for(int k : a){
            System.out.print(k + " ");

        }
    }
    else{
        swap(a,i,j);
        System.out.println("\nSwapped! a[i] = " + a[i] + " a[j] = " + a[j]);
        System.out.println("Swap 3");
        for(int k : a){
            System.out.print(k + " ");

        }
        swap(a,l,j);
        System.out.println("\nSwapped! a[l] = " + a[l] + " a[j] = " + a[j]);
        System.out.println("Swap 4");
        for(int k : a){
            System.out.print(k + " ");

        }

    }


    System.out.println("\nreturn value is: " + j);

    System.out.println("Final array: ");
    for(int k : a){
        System.out.print(k + " ");
    }

}

public static  void swap(int a[], int a1, int a2){
    int temp = a[a1];
    a[a1] = a[a2];
    a[a2] = temp;
}

}
公共类测试{
公共静态void main(字符串[]args){
int[]a={5,3,1,9,8,2,4,7};
int l=0;
int p=a[l];
int i=l;
int j=8;
做{
做{
i++;
System.out.println(“i的值”+i);
}而(a[i]>=p);
做{
j--;
System.out.println(“\n j的值”+j);
}而(a[j]=j);
如果(i>=j){
互换(a、i、j);
System.out.println(“\nSwapped!a[i]=”+a[i]+“a[j]=”+a[j]);
系统输出打印项次(“交换2”);
for(int k:a){
系统输出打印(k+“”);
}
}
否则{
互换(a、i、j);
System.out.println(“\nSwapped!a[i]=”+a[i]+“a[j]=”+a[j]);
系统输出打印项次(“交换3”);
for(int k:a){
系统输出打印(k+“”);
}
互换(a、l、j);
System.out.println(“\nSwapped!a[l]=”+a[l]+“a[j]=”+a[j]);
系统输出打印项次(“交换4”);
for(int k:a){
系统输出打印(k+“”);
}
}
System.out.println(“\n返回值为:“+j”);
System.out.println(“最终数组:”);
for(int k:a){
系统输出打印(k+“”);
}
}
公共静态无效交换(int a[],int a1,int a2){
内部温度=a[a1];
a[a1]=a[a2];
a[a2]=温度;
}
}
结果是:

但当我在纸上模拟它时,我的结果是不同的,要么我把“重复直到”和“做的时候”错了,要么我在纸上分析错了

和我分享你的想法:)谢谢

要么是我在的时候把重复
直到
误认为做了
,要么是我在论文中分析错误

您确实翻译了
重复
/
,直到翻译不正确

它类似于
do
/
while
,但条件的含义完全相反:在
do
/
while
中,结尾的条件是继续条件,但在
中重复
/
直到
中,条件是终止条件

此问题的解决方法是反转
重复
/
的条件,直到
循环:

do{
    i++;
    System.out.println("Value of i " + i);
} while(a[i]< p);
//          ^
do{
i++;
System.out.println(“i的值”+i);
}而(a[i]
谢谢你,伙计!现在我得到了与纸上模拟相同的结果。非常感谢你的澄清!:)