A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 完美恋爱 高级黑马   /  2013-11-13 22:46  /  948 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 完美恋爱 于 2013-11-13 22:50 编辑

题目:对一个数组中的元素进行反转
class Test4
{
        public static void main(String[] args)
        {
                int[] arr = {34,16,23,99,50};
               
                int x = arr.length-1;
               
                System.out.print("{");
                for(int i = 0; i < arr.length; i++,x--)
                {
                        if(i != arr.length - 1)        
                        {
                                int a = arr;
                                arr = arr[x];
                                arr[x] = a;
                                System.out.print(arr+",");
                        }
                        else
                                System.out.println(arr+"}");
                }
        }
}


请问我做的哪里有问题啊!为什么出来的结果会是{50,99,23,99,34}这个样子呢?

2 个回复

倒序浏览
你的for循环那里,循环的太多,只需要i<arr.length/2即可,按照你的你调换一遍过程是这样的
i=0   换位后数组为 50  16  23   99  34    取50
i=1   换位后数组为 50  99  23   16  34    取99
i=2   换位后数组为 50  99  23   16  34    取23
i=3   换位后数组为 50  16   23  99  34    取99
i=4   换位后数组为 50  16   23  99  34    取34



public class Test4 {

        public static void main(String[] args) {
                int[] arr = { 34, 16, 23, 99, 50 };

                int x = arr.length - 1;

                System.out.print("{");
                for (int i = 0; i < arr.length/2; i++, x--) {
                       
                                int a = arr[i];
                                arr[i] = arr[x];
                                arr[x] = a;
                                //
                }
                for(int i=0;i<arr.length;i++){
                        if(i==arr.length-1){
                        System.out.print(arr[i]+"}");
                        }
                        else{
                                System.out.print(arr[i]+",");
                        }
                }
               
        }
                               
        }
回复 使用道具 举报
本帖最后由 zuiaichiyu 于 2013-11-13 23:40 编辑

你循环的次数没搞清楚,另外
  1. for(int i = 0; i < arr.length; i++,x--)
  2.                 {
  3.                         if(i != arr.length - 1)        
  4.                         {
  5.                                 int a = arr;--------这里的arr是数组  应该改成arr[i]后面的也是
  6.                                 arr = arr[x];
  7.                                 arr[x] = a;
  8.                                 System.out.print(arr+",");
  9.                         }
  10.                         else
  11.                                 System.out.println(arr+"}");
  12.                 }
复制代码
你把换位和打印放到同一个代码块中了,我觉得这样很容易混乱,照楼上说的把for循环的判断改成length/2也不会打出正确结果,我试过了,建议楼主分开写功能
  1. //换位
  2.                                 for(int i = 0;i<arr.length/2;i++){

  3.                                         int temp = arr[i];

  4.                                         arr[i] = arr[arr.length-i-1];
  5.                                         arr[arr.length-i-1] = temp;

  6.                                  }
  7.                                
  8.                                 //打印
  9.                                 System.out.print("{");
  10.                                 for(int i = 0 ;i<arr.length;i++){
  11.                                                 if(i!=arr.length-1){
  12.                                                         System.out.print(arr[i]+",");
  13.                                                 }else
  14.                                                                 System.out.println(arr[i]+"}");
  15.                                        
  16.                                 }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马