0

所以我有 2 个字符数组和两个随机数,每个数组一个数字。

我想获取第一个数组中随机数位置的字符,并将其与第二个数组中第二个随机数位置的字符交换。我试过这个:

char[] chs1 = {'h', 'e', 'l', 'l', 'o'};
char[] chs2 = {'w', 'o', 'r', 'l', 'd'};
Random rand = new Random();
int ranNum1 = rand.nextInt(chs1.length);
int ranNum2 = rand.nextInt(chs2.length);
chs1[ranNum1] = chs2[ranNum2];
chs2[ranNum2] = chs1[ranNum1];

有谁知道怎么做?

4

9 回答 9

4

您需要一个临时变量来交换:

char temp = chs1[ranNum1];
chs1[ranNum1] = chs2[ranNum2];
chs2[ranNum2] = temp;
于 2013-05-23T07:37:24.363 回答
3
char[] chs1 = {'h', 'e', 'l', 'l', 'o'};
char[] chs2 = {'w', 'o', 'r', 'l', 'd'};
Random rand = new Random();
int ranNum1 = rand.nextInt(chs1.length);
int ranNum2 = rand.nextInt(chs2.length);
char temp = chs1[ranNum1];
chs1[ranNum1] = chs2[ranNum2];
chs2[ranNum2] = temp;
于 2013-05-23T07:37:28.847 回答
2

这是行不通的:

chs1[ranNum1] = chs2[ranNum2];
chs2[ranNum2] = chs1[ranNum1];

这是因为在第一条语句的末尾,chs1[ranNum1] 与 chs2[ranNum2] 相同;所以第二个语句是无操作的!即,您丢失了最初在 chs[ranNum1] 中的内容。

你需要一个临时的:

char s = chs1[ranNum1];
chs1[ranNum1] = chs2[ranNum2];
chs2[ranNum2] = s;
于 2013-05-23T07:38:37.777 回答
1

您需要一个临时变量:

char temp = chs1[ranNum1];
chs1[ranNum1] = chs2[ranNum2];
chs2[ranNum2] = temp;
于 2013-05-23T07:37:36.443 回答
1

使用临时变量:

char temp = chs2[ranNum2];
chs2[ranNum2] = chs1[ranNum1];
chs1[ranNum1] = temp;

您所做的是更新一个值,然后获取更新后的值并将其再次放在它已经存在的位置。

于 2013-05-23T07:37:39.720 回答
1

您应该将至少一个字符存储在临时变量中,如下所示:

char tmp = chs1[ranNum1];
chs1[ranNum1] = chs2[ranNum2];
chs2[ranNum2] = tmp;
于 2013-05-23T07:38:18.243 回答
1

您需要一个临时字符来存储该值。因为在您: chs1[ranNum1] = chs2[ranNum2] 的那一刻 - 您失去了 chs1[ranNum1] 中的值。

例如:

    chs1[ranNum1] = 'd'
    chs2[ranNum2] = 's'

分配后,您将不再拥有 d 。它还将指向 s。

所以在分配之后

chs1[ranNum1] = 's' chs2[ranNum2] = 's'

总而言之:

    char temp = chs1[ranNum1];
    chs1[ranNum1] = chs2[ranNum2];
    chs2[ranNum2] = temp;
于 2013-05-23T07:42:55.503 回答
0

我认为您应该尝试冒泡排序算法。

char[] chs1 = {'h', 'e', 'l', 'l', 'o'};
char[] chs2 = {'w', 'o', 'r', 'l', 'd'};
Random rand = new Random();
int ranNum1 = rand.nextInt(chs1.length);
int ranNum2 = rand.nextInt(chs2.length);
ch temp = chs1[ranNum1];
chs1[ranNum1] = chs2[ranNum2];
chs2[ranNum2] = temp;
于 2013-05-23T07:40:16.243 回答
0

只是为了好玩......绝对是prev。解决方案有效,但是这个解决方案可以在没有temp变量的情况下完成相同的工作:

public static void main(String[] argv) {
    char[] a1 = { 'h', 'e', 'l', 'l', 'o' };
    char[] a2 = { 'w', 'o', 'r', 'l', 'd' };
    Random rand = new Random();

    for (int n = 0; n < 2; n++) {
        int indexToSwap = rand.nextInt(a1.length);

        System.out.println("Swap " + indexToSwap);
        System.out.println("Before A1 " + toString(a1) + ", A2 " + toString(a2));

        a1[indexToSwap] ^= a2[indexToSwap];
        a2[indexToSwap] ^= a1[indexToSwap];
        a1[indexToSwap] ^= a2[indexToSwap];

        System.out.println(" After A1 " + toString(a1) + ", A2 " + toString(a2));
    }
}

private static String toString(char[] a) {
    StringBuilder sb = new StringBuilder();
    for (char c : a) {
        sb.append(", ").append(c);
    }
    return "[" + sb.toString().substring(1).trim() + "]";
}

对我来说,它产生了以下输出:

Swap 4
Before A1 [h, e, l, l, o], A2 [w, o, r, l, d]
 After A1 [h, e, l, l, d], A2 [w, o, r, l, o]

Swap 2
Before A1 [w, e, l, l, o], A2 [h, o, r, l, d]
 After A1 [w, e, r, l, o], A2 [h, o, l, l, d]
于 2013-05-23T08:21:20.167 回答