当前位置: 代码迷 >> J2SE >> Java基础训练班作业题求修改
  详细解决方案

Java基础训练班作业题求修改

热度:130   发布时间:2016-04-23 19:42:52.0
Java基础培训班作业题求修改
java作业题,求助攻,帮debug,优化下算法。这道题已经把我们宿舍五杀团灭了。
public class zhy{
 //数组元素逆序 (就是把元素对调)     //运行结果出错
public static void main(String[] args){
int arr[] = new int[]{1,2,3,4,5};
invertedOrder(arr);
}
public static void invertedOrder(int arr[]){
for(int i = 0,j=arr.length-1;;i++,j--){
arr[i]= arr[i]^arr[j];//
arr[j]= arr[j]^arr[i];
arr[i]= arr[j]^arr[i];
if(i==j){break;}
}
for(int i=0;i<=arr.length-1;i++){
System.out.print(arr[i]);
}
}
}

------解决思路----------------------

for (int i = 0;i< arr.length/2; i++) {
arr[i] = arr[i] ^ arr[arr.length-1-i];
arr[arr.length-1-i] = arr[arr.length-1-i] ^ arr[i];
arr[i] = arr[arr.length-1-i] ^ arr[i];
}

------解决思路----------------------
思路是有问题,当数组元素个数为偶数时,i和j会擦肩而过,修改一下,也可以的。

for(int i = 0,j=arr.length-1;i<j;i++,j--){
    arr[i]= arr[i]^arr[j];
    arr[j]= arr[j]^arr[i];
    arr[i]= arr[j]^arr[i];
}

试试这样,应该可以。
------解决思路----------------------
没说不能用集合类的话这题可以用投机方法:
		Integer[] arr = new Integer[] { 1, 2, 3, 4, 5 };
List<Integer> list = Arrays.asList(arr);
Collections.reverse(list);
System.out.println(list);

------解决思路----------------------
我也是才开始学JAVA的,才写过这个程序,你可以参考参考

------解决思路----------------------
引用:

for (int i = 0;i< arr.length/2; i++) {
arr[i] = arr[i] ^ arr[arr.length-1-i];
arr[arr.length-1-i] = arr[arr.length-1-i] ^ arr[i];
arr[i] = arr[arr.length-1-i] ^ arr[i];
}


这样异或遇到单数的length中间的值会变成0的
------解决思路----------------------
int temp
 
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
 冒泡法交换
------解决思路----------------------
引用:
Quote: 引用:


for (int i = 0;i< arr.length/2; i++) {
arr[i] = arr[i] ^ arr[arr.length-1-i];
arr[arr.length-1-i] = arr[arr.length-1-i] ^ arr[i];
arr[i] = arr[arr.length-1-i] ^ arr[i];
}

这样异或遇到单数的length中间的值会变成0的

你弄个实验用例试试,应该不会,当用例数组元素个数为奇数时,中间那个数不会参与运算的,arr.length/2是会下取整的
  相关解决方案