2

嗨,我正在学习循环,但是有没有更简单或另一种方法来做循环?
我只是在尝试不同的方式来玩循环,这样我才能更好地理解它..我会很感激的。
非常感谢。

private char guesses [] = new char[26];

void sort() {
    boolean doMore = true;
    while(doMore) {
        doMore = false;
        for(int i = 0; i < guesses.length - 1; i++) {
            if(guesses[i] > guesses[i+1]) {
                char temp = guesses[i];
                guesses[i] = guesses[i+1];
                guesses[i+1] = temp;

                doMore = true;
            }
        }
    }
}
4

5 回答 5

1

不,这是非常典型的冒泡排序。您可以更改它的唯一其他方法是使用“do...while”循环,如下所示:

void sort() {
boolean doMore;
do {
    doMore = false;
    for(int i = 0; i < guesses.length - 1; i++) {
        if(guesses[i] > guesses[i+1]) {
            char temp = guesses[i];
            guesses[i] = guesses[i+1];
            guesses[i+1] = temp;

            doMore = true;
        }
    }
} while (doMore);
于 2012-09-05T22:02:46.373 回答
0

该算法将您的数组从最小到最大排序。有许多其他方法可以做到这一点(您的称为冒泡排序,除了您所展示的之外,没有太多其他方法可以实现它),您可以在此处阅读其中一些。请注意,您始终可以使用java.util.Arrays.sort(int[] a),它使用双轴快速排序

于 2012-09-05T22:04:31.153 回答
0

不是 java 男孩,但如果是我,我会把 for 循环放在它自己的函数中让它返回 true,你当前正在设置 domore 然后

do-while {SomeSuitableFunctionName};

将使您的代码更易于理解。

于 2012-09-05T22:06:06.310 回答
0

起初你的排序算法不是很好,大约需要 n!时间,n*log(n) 时间有非常好的算法,如果你感兴趣,你可以查看这个 http://en.wikipedia.org/wiki/Quicksort,那么循环呢,你可以使用whilefordo while如果你愿意,你可以使用 make some loop with go tooperator ,但这不是一个好方法,如果你有任何问题,你可以问;)

于 2012-09-05T22:14:36.697 回答
-1

如果您想花哨,可以使用 xor 交换变量,但我不推荐它,因为它可能会将您的代码混淆给其他用户。

要交换 a 和 b 的值,您可以运行此代码

a ^= b; 
b ^= a;
a ^= b;

看起来您正在尝试对数组进行排序,因此我建议为此使用 Arrays.sort。

API 在这里

至于循环的使用 - 它可以完成工作,但我不会重新发明轮子进行排序。

于 2012-09-05T22:01:58.047 回答