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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 天亮1 中级黑马   /  2018-12-20 14:33  /  1224 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

程序设计中的交换思想






       问题:用程序模拟两个容器的内容交换。比如a=A,b=B,变成a=B,b=A。
      乍一看,这个好像是个很简单的问题,可是似乎又有些不知怎么下手,这大概是大多数初学者遇到的现象。其实这也正常,一个与程序没有多少关系的问题,摆在我们的面前,我们自然会用程序的逻辑思维去看待。但是,你要记住一句话,程序就是生活。程序就是来解决生活中的问题的,两者直接必然有内在的联系,只是表现形式有所不同而已。上面的这个问题,如果我们把它放到生活中,你能不能做到呢?试想一下,两个盆子,一个装油,一个装水,你要把它们换过来,你是不是需要另一个容器来临时中转一下?想到了这一点,用Java来模拟就自然轻而易举了。
public static void main(String[] a){
          String a="水";
          Sring b="油";

         //另一个盘子
          String c;
        //腾出装水的盘子
        c=a;
       //把油放到水的盘子里去,腾出放油的盘子
       a=b;
       //把水放到放油的盘子
       b=c;

      System.out.println("a:"+a+",b:"+b);
  }

再来看看这种交换思想在其他案例中的运用。
有一个数列,叫斐波那契数列。看看它的各项就知道这个数列的规律了,{1,1,2,3,5,8,13,21,34,55......}从第三项开始,每一项都是前两项的和。
用Java来输出它的前10列吧。
我们需要做的就是不断的把n,n-1,n-2之间的值进行交换。
第一种方式,使用数组。
public static void main(String[] args){
        int[] a=new int[10];
        a[0]=1;
       a[1]=1;
      for(int i=0;i<10;i++){
           if(i<2){
             System.out.print("1,");
         }else{
         a=a[i-1]+a[i-2];//循环交换
       System.out.print(a+",");
       }
   }
}

第二种方式。使用变量直接交换
public static void main(String[] args){
       int a1=1;
      int a2=1;
     int a3;
    for(int i=1;i<=10;i++){
          if(i<3){
           System.out.print("1,");
           }else{
          a3=a1+a2;
       //仔细体会下交换过程
       a1=a2;
       a2=a3;
       System.out.print(a3+",");
        }
    }
}
其他诸如递归的方式与交换无关,不在此说明。
记住,程序就是生活。碰到程序上的难题时,不妨把它放到生活中去想想看。


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马