Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.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_Swap_Chars - Fatal编程技术网

Java 在两个数组中交换两个字符

Java 在两个数组中交换两个字符,java,swap,chars,Java,Swap,Chars,我有两个字符数组和两个随机数,每个数组一个数字 我想得到第一个数组中随机数位置的字符,并将其与第二个数组中第二个随机数位置的字符交换。我试过这个: 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.nextIn

我有两个字符数组和两个随机数,每个数组一个数字

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

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

有人知道如何交换吗?

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

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

您需要一个临时变量:

char temp = chs1[ranNum1];
chs1[ranNum1] = chs2[ranNum2];
chs2[ranNum2] = temp;
char temp = chs2[ranNum2];
chs2[ranNum2] = chs1[ranNum1];
chs1[ranNum1] = 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() + "]";
}

使用临时变量:

char temp = chs1[ranNum1];
chs1[ranNum1] = chs2[ranNum2];
chs2[ranNum2] = temp;
char temp = chs2[ranNum2];
chs2[ranNum2] = chs1[ranNum1];
chs1[ranNum1] = 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() + "]";
}

您所做的是更新一个值,然后获取更新后的值并将其重新放在原来的位置。

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

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

这是行不通的:

chs1[ranNum1] = chs2[ranNum2];
chs2[ranNum2] = chs1[ranNum1];
这是因为在第一条语句的末尾,chs1[ranNum1]与chs2[ranNum2]相同;所以第二句话是否定的!i、 e.您已经丢失了chs[ranNum1]中原来的内容

您需要一个临时的:

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

我想你应该试试冒泡排序算法

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;

您需要一个临时字符来存储值。因为当你: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;

只是为了好玩。。。肯定是上一个。解决方案可以工作,但这一解决方案在没有
temp
变量的情况下也可以执行相同的任务:

char temp = chs1[ranNum1];
chs1[ranNum1] = chs2[ranNum2];
chs2[ranNum2] = temp;
char temp = chs2[ranNum2];
chs2[ranNum2] = chs1[ranNum1];
chs1[ranNum1] = 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() + "]";
}