约瑟夫问题用面向对象思想来解决的方法

上一篇文章说到了约瑟夫问题,现在再用面向对象的思想来解决。

先建立两个类:Child类和Circle类,分别保存小屁孩儿的信息和圆圈的信息。

约瑟夫问题的面向对象思想解决方法

约瑟夫问题的面向对象思想解决方法

代码如下:

Child类:

/**
 * 用于描述小孩儿的信息,最关键的是该小孩儿前后的两个小孩
 * @author Bigworld
 */
class Child {
	static int count = 1; // 用于生成小孩的编号,每次实例化一个小孩会加1
	
	Child prev, next; // 表示该小孩前后2个小孩
	int id;			// 表示小孩的编号

	public Child() {
		id = count ++; // 给小孩加编号
	}
}

继续阅读

Java修道之路:我也来讲讲约瑟夫问题

“约瑟夫”名字听起来挺B格的,可是不要以为是什么很高深的玩意儿。

举个例子:

有30个小屁孩儿,手拉手的围成一个圈,然后从第一个小屁孩儿开始报数,1,2,3,当报到3时,报3的那个小屁孩儿就退出圈,然后从该报4的那个小 屁孩儿重新开始报1,当又报到3时,报3的那个小屁孩儿退出,这样反复循环,当只剩下最后一个小屁孩儿的时候,问该小屁儿是这个圈中的第几个小屁孩儿。

问题就是这么简单,怎么做呢?

首先想到的就是使用数组模拟这个圈,方法可以,但是程序写起来比较繁琐。

那么面向对象思想呢?也可以,定义一个小孩儿类和一个圈类,然后构建一个双向循环链表,也可以搞定。但是代码量也挺大,而且构建链表的时候会犯晕……

其实,我想说的是一个代码量很少而且也很好理解的算法,就是使用Java提供的“队列(Queue)”,就可以轻松搞定。但是,在这之前必须转换一下思维。 继续阅读

Java修道之路:遍历枚举类以及随机选取枚举值的方法

Java中的Enum是个不错的东西,中文名字叫做“枚举”,怎么用呢?

首先定义一个枚举类,枚举类定义出来就是静态的,里面的值可以自己任意命名,之后Java会自动分配相应的int值,而我们调用枚举类不需要使用int值,而是直接使用枚举的命名,这个用法有点类似于常量。

在枚举类的API中(lang.Enum)还有一些方法,比如ordinal方法就是返回该枚举值对应的int值。

枚举类是定义出来了,但是如果想遍历该枚举类,以及随机选取一个枚举值,该怎么做呢?

经过实验,下面方法可行: 继续阅读

Java修道之路:为 JPanel添加事件监听

使用Java.swing创建窗口的时候一般如下代码:

JFram jf = new JFram();
Jpanel jp = new JPanel;
jf.add(jp);

这样,就创建了一个窗口。

这时如果想要向jp中的对象加入控制事件(如键盘事件),会遇到一个问题:jp无法获得事件……而监听到事件的是jf。

后来查询得知,其实代码很简单,只用给jp添加一段代码即可:

jp.setFocusable(true);

这段代码的意思是重新设置jp的焦点,覆盖其父类 Component的焦点设置,这样jp就可以获得事件了!

Java修道之路:日期和时间处理(3) 之 Calendar

之前java都是自学的,所以文章也都叫做“Java自学之路”,但是自今年12月起,开始正式的系统的学习了,也有了比以前更大的信心,所以我觉得要改成“Java修道之路”更贴切一些了,也算做是不再小打小闹的开始吧!当然,不是修道路的道……而是悟出自己对Java的理解和使用经验,这才谓之“道”!

好了,进入正题,今天说说日期处理中的Calendar类的常用方法,当然,我不是大神,只是记录学习的内容,将常用的方法简练的表示出来,供大家学习和参考,也算是复习吧!

Calendar类在 java.util.Calendar 中,是继 Date 类的一个新的日期处理的类,因为 Date 类对于时间处理有很多的不好的地方,所以很多方法都弃用了,改成了 Calender 的方法,不要看 Calendar 类中方法多,它们的确是很好用的,其实只用记住常用的一些方法就好了。

1、创建Calendar的实例,由于Calendar类的构造方法是protected的(受保护的访问权限),所以它提供了一个方法来返回实例:

Calendar c = Calendar.getInstance();

该方法返回的是一个当前日期时间的Calendar对象。

2、Calendar转为 Date

Date d = c.getTime();

这个方法的方法名比较坑,获得Date对象的方法名叫做getTime…… 继续阅读

找新鲜之重庆游

应小伙伴之邀,周末去了重庆。在成都呆惯了,也习惯了成都的所见所闻,觉得哪里都是一样的。也正是这种想法,我才领略到了什么叫第一次……

没错,我是第一次去重庆,也许以前途径过重庆吧,那都是不记事儿的时候吧,所以还是算第一次去重庆吧!

以前听闻,重庆山多,一栋楼房的顶楼可能变成了另一栋楼的底楼,到了重庆才知道,这还真是名副其实呢~ 在成都很难看到上坡下坎的路,重庆处处都是,站在街的这头看不到街的那头,只能看到一条陡陡的高坡,这种场景真的随处可见。

中午时分,下了动车就打了辆出租车到地点与朋友汇合,重庆的出租都是清一色的黄色小铃木,而成都的是绿色大众,的确还是不习惯……

到达了狮子坪站,突然出现在眼前的一样东西把我惊呆了,那是类似成都的高铁的玩意儿,但是这玩意儿不像成都高铁是在混凝土槽子里跑,它是抱在混凝土杆子上跑的,科幻感十足啊!!!后来才知道,这个就是轻轨…… 继续阅读

用一种认真的态度对待生活!

这一年,确切的说是下半年,我漂泊着,也经历了很多,拿出了勇气辞职,拿出了魄力转行,遭遇了出于对我的考虑的抛弃,悲催的被拒绝以及无尽的悔恨……

自己的无知、无所谓的态度、笨拙的对人处事、也许大大咧咧的做事方式,渺小、无能为力、无助被赤裸裸的暴露的丝毫没有隐藏!!!

我发现,其实一切都给了我选择,二选一或者三选一甚至更多,但是我却没有好好的选择,总是一副无所谓的样子,也许是因为选项都不是我想要的结果……

但无所谓的态度并没有阻止事情的发展,无论发展的好与坏,而且在发展的过程中选择就仅仅一次,一旦选择就不能改变!那为什么不认真对待呢?

无所谓也许是人的性格,但是不要什么都一副无所谓!是自己的再是不想要,也不能无所谓啊!如果真的无所谓,记得考虑有所谓的人!不要因此而后悔!!!

漂泊不代表悲哀,以前的我害怕漂泊,现在我倒是希望自己能够到处漂泊,才能认识到真正的自己,改变自己,才能长大。每个人都会有不同的经历,但是都无法摆脱和避免必须经历一段非常非常艰难的时期才能变强,也许我现在就正在经历!

今天早上看到一篇文章,教我们认真对待生活,认真对待每一件事,也许我应该正视不想接受的东西,或者不愿意做的事情,给予它一个仪式,让自己勇敢的接受和面对。

那么我希望的是用一种认真的态度对待生活,而不是本该用一种认真的态度对待生活……

继续阅读

Hibernate涉及Date变量报“Data truncation”错误

使用Hibernate照着教程写了一个数据存入数据库的代码,数据的类型有int,Sting和java.util.Date,运行报错:

ERROR: Data truncation: Incorrect datetime value: ” for column ‘BIRTHDAY’ at row 1

查阅后感觉是Date数据为空,但打印出来发现并不为空…最后终于发现是JDBC驱动版本太低了导致的……估计新版对Date类型有更新,想想Date类型数据的确是个头痛的事儿。

之前图方便把3.1.13版的JDBC导入了工程,后面重新下载了最新版5.1.37,就没有报错了。

看来写程序还是不能图方便啊,尽量使用新版。

对了,JDBC驱动在MySql网站上也叫做Connector/J,搜索就可以下了!

Hibernate出现“Error parsing JNDI name []”错误解决方法

使用Eclipse编写Hibernate写入数据库的代码,运行能通过,但是有警告:

WARN: HHH000277: Could not bind factory to JNDI
org.hibernate.engine.jndi.JndiException: Error parsing JNDI name []

这是什么原因呢,搜之得到,原来是Eclipse自动生成.cfg.xml文件时,在标签中加入name=””导致的,因此更改如下:

<hibernate-configuration>
 <session-factory>

即去掉name=””,这个貌似是和JNDI有关,还没有这么深入研究,我也说不出所以然啦,这里就这么处理吧。

对了,如果Eclipse打开.xml文档不是显示的代码,而是一些选项框的话,那么在编辑框的下方找到“Source”按钮就可以调回代码模式了。

Java自学之路:Hibernate5.0初始化配置

开始学习Hibernate了,教程是慕课网上找的,结果跟着慕课网上的教程一步一步的折腾了半天,居然发现无法配置Hibernate,具体细节就不说了,直接说原因。

因为慕课网当时做的视频使用的是Hibernate4.2.4(就是4.0),而我现在下的Hibernate最新版是5.0.2(就是5.0),这两个版本的配置方法不一样……

我去啊……这纯粹就是给初学者那本来就脆弱的小心脏猛烈的打击啊!!!经过Derek大神的指点,还是乖乖的看Guide吧,应该有例子……嘿,果不其然,真让我在茫茫的英文字母中找到了案例,直接抄过来就好了。 继续阅读

Win10出现“任务计划程序”弹出“找不到远程计算机”的解决方法

今天输入法又出问题了,看来真的要重新装一下系统才行了,但是鉴于没有这么多时间来折腾,还是将就一下,用之前的解决方法解决一下,见《Win10出现输入法无法切换的解决方法》。

可是点击“任务计划程序”居然弹出“找不到远程计算机”……这是什么鬼……

解决方法如下:

  1. 依次点开计算机管理 – “服务和应用程序” – “服务”
  2. 在右侧找到“Task Scheduler”,并右键点击“启动”

这个时候任务计划程序就可以打开了……

Win10出现输入法无法切换的解决方法

最近我的win10老是出这个问题,就是某些软件界面无论按Ctrl+Shift还是Ctrl+空格还是Shift都无法切换中文输入,并且状态栏找不到输入法的图标……不知道是不是我电脑问题,反正就觉得win10有时候很蛋疼……

后来找到了方法,原来是一项任务计划程序没有运行导致的,设置方法如下:

  1. 右键此电脑,点击“管理”,打开计算机管理
  2. 依次点开“系统工具” – “任务计划程序” – “任务计划程序库” – “Microsoft” – “Windows” – “TextServicesFramework”(注:如果“任务计划程序”弹出“找不到远程计算机”请见《Win10出现“任务计划程序”弹出“找不到远程计算机”的解决方法》)
  3. 在右边的“名称”栏可以看到“MsCtfMonitor”,右击它,点击“运行”

这时状态栏的输入法图标就出现了,就恢复正常了……

配置Spring出现“java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory”异常解决方法

配置Spring后,运行Spring程序出现了“Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory”异常,是因为没有将logging.jar引入,因此这里下载logging.jar并引入就解决了。

Java自学之路:Spring在Eclipse中配置

Spring的学习其实早就开始了,但是算是人浮于事,看看教程算是预习,到今天材终于动手操作。对于初学者来说,Spring就是“他们都说:好~~~”……换人话,对于新手来说Spring就是不知所云。所以今天呢,我也算是依葫芦画瓢,很多代码不去深究,先把Spring成功配置到eclipse中再说!

下面来说说我的配置方法: 继续阅读