使用Java实现repeat/until算法
请帮助我模拟此算法: 给定数组[5 3 1 9 8 2 4 7],假设l=0 我将其转换为代码:使用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++;
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]
谢谢你,伙计!现在我得到了与纸上模拟相同的结果。非常感谢你的澄清!:)