Java自学之路---DotCom

引言

  我从接触编程以来,一直是一个C/C++程序猿,由于我喜欢编程时,那种接地气的感受,认为只有本身管理内存的使用,心理才踏实。但随着工做中不断增长的见闻,不断的从博客和源码中得到新的看法,我发现这个时代已经发生了变化,咱们有强劲的硬件资源、咱们有久经考验的框架和源码,咱们最宝贵的是花在编码上的时间。因此我决定带着以前C/C++的经验,来认识JAVA是门怎样的语言,以及它的编程理念能够给我带来怎样的好处。java

如何学习

  和我学习其余语言同样,我主要仍是依靠书本,电子书或者是纸质书,这样学习起来才是最系统也是效率最高的,相比而言,视频教学可能让你掌握更多的实战经验,不过效率实在太慢。算法

今天的主题

  我目前正在看一本经典的入门书籍《Head First JAVA》,中文名叫作《深刻浅出学习java》,这本书确实是比较适合初学者的,并且主要从意识流上让你汲取java的精髓,和其余“教科书”般的学习资料相比,显得不同凡响。由于具有C/C++的基础,前几章讲的数据类型、类与对象、对象的操做基本上扫一遍就过掉了,今天拿出其中的总结性的练习题,就当开始学习JAVA的热身运动吧。编程

  这个练习题是说编写一个叫作DotCom的游戏,说是游戏,其实内容很简单,在一个N*N的网格中,随机生成3个物体,物体占据网格的若干个格子,用户输入网格的坐标当作击打物体(用户事先不知道物体存在于哪几个格子中),若是用户输入的坐标正好是物体的坐标,则表示击中,其中该物体所占全部的格子,则该物体被击毁,游戏结束。框架

图片来自《Head First JAVA》dom

  这个游戏其余的部分都不算复杂,只要随机生成物体坐标,读取用户输入,轮询的判断、读取,知足游戏结束条件就结束便可,惟一有挑战性的即是如何随机生成若干个符合逻辑的物体,即物体不能超出网格范围,不能跨行,物体与物体之间不能重叠,每次都要随机生成。编程语言

  固然书中给出了解决的方法,可是我以为算法很繁琐,你们有机会能够去看看,在书中的152页,这里就不贴出代码了,由于不能直接复制。。。工具

  因为初识JAVA,只是按照本身的想法去编码,确定有不少纰漏,还请各位JAVA大神帮忙指正。学习

下面给出个人代码:编码

  1 package dotComGame;
  2 import java.util.ArrayList;
  3 public class GameHelper {
  4     private int row = 0;
  5     private int col = 0;
  6     private int gridSize = 0;
  7     private int[] grid = null;
  8     public GameHelper(int num) {
  9         if (num >= 0 || num < 65535) {
 10             row = num;
 11             col = num;
 12             
 13             gridSize = row * col;
 14             grid = new int[gridSize];
 15             
 16             for (int i = 0; i < grid.length; i++) {
 17                 grid[i] = 0;
 18             }
 19         }
 20     }
 21     
 22     public ArrayList<Integer> placeDotCom(int num) {
 23         
 24         int []tmp = new int[gridSize];
 25         
 26         ArrayList<Integer> pos = new ArrayList<Integer>();
 27         if (num > row || num > col) {
 28             return null;
 29         }
 30         
 31         int incre = 1;
 32         
 33         if (Math.round(Math.random() * 1) == 0) {
 34             incre = col;
 35         }
 36         
 37         boolean success = false;
 38         int attempts = 0;
 39         while (!success && attempts++ < 512) {
 40             System.arraycopy(grid, 0, tmp, 0, gridSize);
 41             //找到第一个能够存放的位置
 42             int location = (int) Math.ceil(Math.random() * gridSize);
 43             int i = 0;
 44             while (i < num) {
 45                 
 46                 //是否越下边界
 47                 if (location + (i * incre) >= gridSize) {
 48                     success = false;
 49                     break;
 50                 }
 51                 
 52                 //是否越右边界
 53                 if (0 == (location + (i * incre)) % col) {
 54                     success = false;
 55                     break;
 56                 }
 57                 
 58                 //是否已经被占用
 59                 if (0 != tmp[location + (i * incre)]) {
 60                     success = false;
 61                     break;
 62                 }
 63                 
 64                 tmp[location + (i * incre)] = 1;
 65                 
 66                 pos.add(location + (i * incre));
 67                 
 68                 i++;
 69             }
 70             
 71             if (i == num) {
 72                 success = true;
 73                 System.arraycopy(tmp, 0, grid, 0, gridSize);
 74                 break;
 75             }
 76             else {
 77                 pos.clear();
 78             }
 79             
 80         }
 81         
 82         if (success)
 83             return pos;
 84         else
 85             return null;
 86     }
 87     
 88     public void Draw() {
 89         
 90         for (int i = 0; i < grid.length; i++) {
 91             System.out.print(grid[i]);
 92             if (0 == (i+1) % col) {
 93                 System.out.println();
 94             }
 95         }
 96         
 97     }
 98     public static void main(String []args) {
 99         GameHelper helper = new GameHelper(15);
100         for (int i = 0; i < 6; i++) {
101             helper.placeDotCom(3);
102         }
103         helper.Draw();
104     }
105 }

  算法基本的核心就是先随机选取一个物体的头坐标,而后反复判断每一个物体结点坐标是否合法,物体的坐标所有合法,则记入网格中。spa

 

结束语

  相信无论之后是否从事JAVA的编程工做,学习JAVA总老是有好处的,并且我也不同意,学一门语言就必定要靠它吃饭,世界上的编程语言种类繁多,每一种都有他的独特之处,都有他的魅力所在,就比如旅游,你去了一趟泰国,并不表示你就要永远的留着泰国,而且编程语言也不是编程的所有,语言只是咱们解决问题的一种方法和工具,咱们使用不一样的语言,有时只为达到一样的目的:就比如上班的路上,有人坐地铁,有人挤公交,还有人骑单车甚至走路,目的都是为了赶在迟到以前到公司。

相关文章
相关标签/搜索