锁定老帖子 主题:从一道面试题想到的
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-29
最后修改:2009-12-29
berlou 写道 akunspy 写道 总有蠢材要把简单问题复杂化,这样的程序员我碰到直接就不要
考设计会出这样的题?真不知道是谁脑子坏了 简单问题复杂化确实是不好的习惯, 不过也因情况而异。 这种问题确实需要做些设计的, 也许客户需求变化了呢?不是螺旋矩阵而是贪吃蛇呢? 如果是一个网络游戏, 物体行走路线算法呢?Point, Direction这种封装还是有必要的。 当然这种问题在面试时回答要看对方是什么样的公司, 考察什么内容, 如果C程序员职位, 做底层开发的, 自然不用这么封装, 如果是Java程序员, 做游戏或者产品的, 不封装一下才是找抽呢。 说得好,需求变化了怎么办.需求变成不是螺旋矩阵也不是贪吃蛇,而是三维空间多方向同时的旋转,且几个旋转方向互相影响,我倒想看看这段所谓OO的代码要改成啥子样子. 你举的网络游戏例子更不合适,我就是做网络游戏服务端的,那种效率优先的地方最直接的行走路线算法都嫌慢(防外挂,路点必须都做检查),要是到处都"封装"一下,多"完美"啊,只是一台服务器只上得到100人,这可不怪我了. OO不是银弹更不是一切,KISS才是程序员应该树立的正确的世界观.感觉JAVA程序员很多走进了OO的怪圈.为了OO而OO,真正重要的是什么?是设计,是了解你要做的东西的业务逻辑而做出合理的能适应修改的设计. 别天真的以为封了几个类就灵活了 |
|
返回顶楼 | |
发表时间:2009-12-29
金蝶确实考很多算法,我栽了
|
|
返回顶楼 | |
发表时间:2009-12-29
package first;
/** * Created on 2009-12-29 * <p>Description: [描述该类概要功能介绍]</p> */ public class Game { private static final String BLANK = " "; public static void main(String[] args) { // 打印的结果可以理解为一个正方形,参数相当于正方形的边长 int[][] target = createArray(6); printArray(target); } /** * <p>Discription:[参数相当于正方形的边长]</p> * @param iLength * @return */ private static int[][] createArray(int iLength) { int[][] target = new int[iLength][iLength]; int iCircle = (iLength % 2 == 0) ? iLength/2 : iLength/2 + 1; int a1 = 1; for (int k = 0; k < iCircle; k++) { int a2 = a1 + iLength-1; int a3 = a2 + iLength-1; int a4 = a3 + iLength-1; int a4End = a4 + iLength-2; int iColumn = k + iLength; // 向右移动 for (int m = k, n = k; n < iColumn; n++) { if (n == k) { target[m][n] = a1; } else { target[m][n] = target[m][n - 1] + 1; } } // 向下移动 for (int m = k, n = iColumn -1; m < iColumn; m++) { if (m == k) { target[m][n] = a2; } else { target[m][n] = target[m - 1][n] + 1; } } // 向左移动 for (int m = iColumn -1, n = iColumn -1; n >= k; n--) { if (n == iColumn - 1) { target[m][n] = a3; } else { target[m][n] = target[m][n + 1] + 1; } } // 向上移动,移动到起始位置的下方的点 for (int m = iColumn -1, n = k; m > k; m--) { if (m == iColumn - 1) { target[m][n] = a4; } else { target[m][n] = target[m + 1][n] + 1; } } a1 = a4End + 1; iLength -= 2; } return target; } private static void printArray(int[][] target) { int iLength = target.length; for (int i = 0; i < iLength; i++) { for (int j = 0; j < target[i].length; j++) { String str = String.valueOf(target[i][j]); if (str.length() == 1) str = BLANK + str; System.out.print(str + BLANK); if ((j+1)%iLength == 0) System.out.println(); } } } } |
|
返回顶楼 | |
发表时间:2009-12-29
面向对象的思维呀,哈哈!
|
|
返回顶楼 | |
发表时间:2009-12-29
我觉得这个贴该发在jdon上,呵呵。。
|
|
返回顶楼 | |
发表时间:2009-12-29
楼主的思考,真的很有道理,并且思路很清晰!
|
|
返回顶楼 | |
发表时间:2009-12-29
运行不了,有运行起来的吗
|
|
返回顶楼 | |
发表时间:2009-12-30
楼主很强悍。思考很周道。呵呵。楼上很多说简单的东西复杂化了,问题并不是简单的东西复杂化,要考虑周道不简单啊。现在开发中改得多,很多就是程序太懒太简单自认为就可以了。太少考虑设计了。
|
|
返回顶楼 | |
发表时间:2009-12-30
4 小时前 JavaEye管理员 发给 我 的消息
标题: 您的帖子被JavaEye会员集体投票评为新手帖 正文: 您的帖子:从一道面试题想到的 被JavaEye用户投票评为新手帖帖,积分-10分。 发贴前请仔细阅读 JavaEye版规和提问的智慧,如有异议,可以到JavaEye站务圈子申诉。 如果您只是急切的想找人解答你的问题,而不是为了讨论技术的话,请移步到JavaEye问答频道,在问答频道您可以用积分悬赏解答,并且不受论坛发贴规则的制约,谢谢! 这是系统的自动通知,无需回复 |
|
返回顶楼 | |
发表时间:2009-12-30
第一次发帖,竟然这样!!!!!!!!!!!!!!!!!!天理啊。而且还让我做《JavaEye论坛使用规则 》题。
|
|
返回顶楼 | |