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() + "]";
}