【发布时间】:2016-08-16 17:41:09
【问题描述】:
我一直在执行与数组相关的测试,我尝试按照特定模式交换数组,然后尝试将数组交换回它最初使用模式的方式,相反它总是有效的。当我进行测试时,我遇到了一个棘手的情况,我的反转模式根本无法完成工作!我决定在这里发布我的问题,看看是否有人对我尝试反转数组时缺少的内容有任何见解!数组不可逆吗?
数组连同交换模式:
String[] strs = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
for(int i = 0; i<strs.length-2; i++){
String temp = strs[i];
strs[i] = strs[i+2];
strs[i+2] = temp;
for(int r = 0; r<strs.length-6; r++){
String temp2 = strs[r];
strs[r] = strs[r+6];
strs[r+6] = temp2;
for(int s = 0; s<strs.length-4; s++){
String temp3 = strs[s];
strs[s] = strs[s+4];
strs[s+4] = temp3;
for(int t = 0; t<strs.length-2; t++){
String temp4 = strs[t];
strs[t] = strs[t+2];
strs[t+2] = temp4;
}
}
}
}
结果:G B E H I N M T O D A L S V Q P W F Y X C J K R U Z
我最初尝试使用相同的公式反向还原数组 但即使它在没有索引越界异常的情况下编译,它仍然不会将数组恢复到其原始状态!
for(int i = 0; i<strs.length; i++)
System.out.print(strs[i]+" ");
System.out.println("");
for(int i = strs.length-3; i>=0; i--){
String temp = strs[i];
strs[i] = strs[i+2];
strs[i+2] = temp;
for(int r = strs.length-7; r>=0; r--){
String temp2 = strs[r];
strs[r] = strs[r+6];
strs[r+6] = temp2;
for(int s = strs.length-5; s>=0; s--){
String temp3 = strs[s];
strs[s] = strs[s+4];
strs[s+4] = temp3;
for(int t = strs.length-3; t>=0; t--){
String temp4 = strs[t];
strs[t] = strs[t+2];
strs[t+2] = temp4;
}
}
}
}
for(int i = 0; i<strs.length; i++)
System.out.print(strs[i]+" ");
结果:G N O P W R E B C H A D I T Q Z K L M V S F Y J U X
这是
建议的反转版本for(int i = 0; i<strs.length-2; i++){
String temp = strs[i];
strs[i] = strs[i+2];
strs[i+2] = temp;
for(int r = 0; r<strs.length-6; r++){
String temp2 = strs[r];
strs[r] = strs[r+6];
strs[r+6] = temp2;
for(int s = 0; s<strs.length-4; s++){
String temp3 = strs[s];
strs[s] = strs[s+4];
strs[s+4] = temp3;
for(int t = 0; t<strs.length-2; t++){
String temp4 = strs[t];
strs[t] = strs[t+2];
strs[t+2] = temp4;
}
}
}
}
结果:I X Y B E N K T G P S D Q Z O F A H M V U L C J W R
【问题讨论】:
-
I/O 会有所帮助.. 但更有帮助的是 cmets 以及您实际遇到问题的地方..
-
这些方法所做的只是在一系列嵌套的 for 循环中交换数组中的元素。根据各自的 for 循环,所有元素都在不同的位置交换。问题是我将数组恢复到原始状态的解决方案根本不这样做!我得到的结果不是原来的数组。
-
您确定要嵌套
for loops 吗? -
originally using the pattern,你是说memento-pattern吗? -
@garnulf 是的,我想实现最佳交换以使数组看起来随机播放