-
throws是声明并向上一层继续抛出异常查看全部
-
throw是动作抛出异常 例:throw new EXception() public void 方法名 throws Exception1,Exception2...查看全部
-
throwable -error -exception查看全部
-
Arrays.asList(arr)将数组转为list查看全部
-
Set集合是无序且不可重复的,只能通过循环遍历或迭代遍历获取里面的元素
Set接口及其实现类--------HashSet
Set是元素无序并且不可以重复的集合,被称为集
HashSet-------哈希集,是Set的一个重要实现类
查看全部 -
欢迎交流与探讨,玩家数和牌数可自由调整(不要超出牌的数量)
大神们可以指点下哪里可以优化!
package com.game; import java.util.*; public class Cars implements Comparable<Cars>{ private List<Cars> cars; private Map<Integer,PlayerInfo> player; private int player_num = 2;//玩家数 private int car_num = 2;//每人发牌张数 private Integer pai_key;//牌的键值,用于比较大小 private String pai_value;//牌的名称 public Cars(){ this.cars = new ArrayList<>(); this.player = new HashMap<>(); } public Cars(int pai_key,String pai_value){ this.pai_key = pai_key; this.pai_value = pai_value; } /** * 创建手牌(按从小到大的方式,方便后面的比较) */ public void createCars(){ System.out.println("===================创建一副手牌====================="); String[] pai = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; String[] hua = {"方块","梅花","红桃","黑桃"}; int p_key = 0; for (String p:pai){ for (String h:hua) { System.out.print(h + p + " "); cars.add(new Cars(p_key,h + p)); p_key++; } } System.out.println("\n"); } //创建玩家 public void createPlayer(){ System.out.println("=====================创建游戏玩家==================="); Scanner console = new Scanner(System.in); int num = 0; while (num < player_num){ System.out.println("请输入玩家ID"); if(console.hasNext()){ String id = console.next(); //不创建名称了,直接用id代替 player.put(num,new PlayerInfo(id,id)); System.out.println("成功创建玩家 " + id); num++; } } } /** * 洗牌并发牌 */ public void deal(){ System.out.println("======================开始发牌======================"); //打乱牌的顺序 Collections.shuffle(cars); //发牌次数 = 玩家数*每人张数 for (int i=0;i< (this.player_num * this.car_num);i++){ //本轮获得牌的玩家player的key Integer player_num = i%this.player_num; //获取玩家对象 PlayerInfo player = this.player.get(player_num); Cars car = this.cars.get(i); player.carList.add(car); System.out.println("玩家 " + player.id + " 获得手牌:" + car.pai_value); } } /** * 比较大小 */ public void winner(){ System.out.println("======================比较大小======================"); Set<Integer> keySet = this.player.keySet(); int max = -1; String win = ""; for (int p_key:keySet){ PlayerInfo play = player.get(p_key); //按牌的key大小进行排序 Collections.sort(play.carList); Cars max_car = play.carList.get(0); int tmp_max = max_car.pai_key; if (tmp_max > max){ win = play.id; max = Math.max(max,tmp_max); } System.out.println("玩家 " + play.id + " 最大手牌 : " + max_car.pai_value); } System.out.println("玩家 " + win + " 获胜!!!"); } public static void main(String[] args) { Cars game = new Cars(); game.createCars(); game.createPlayer(); game.deal(); game.winner(); } @Override public int compareTo(Cars o) { return o.pai_key.compareTo(this.pai_key); } }
package com.game; import java.util.ArrayList; import java.util.List; public class PlayerInfo{ public String id; public String name; public List<Cars> carList;//手牌 public PlayerInfo(String id,String name){ this.id = id; this.name = name; this.carList = new ArrayList<>(); } }
查看全部 -
Compartor接口——比较工具接口
用于定义临时比价规则,而不是默认比较规则
其实现类需要实现compare()方法
Comparator和Comparable都是java集合框架的成员
查看全部 -
Comparable接口——可比较的
实现该接口表示:这个类的实例可以比较大小,可以进行自然排序
定义了默认的比较规则
其实现类需实现compareTo()方法
compareTo()方法返回正数表示打,负数表示小,0表示相等
查看全部 -
Java中字符串的不变性
String 对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指的内存空间不同。
String s1="爱慕课";
String s2="爱慕课";
String s3=new String("爱慕课");
String s4=new String("爱慕课");
//多次出现的字符串常量,Java编译程序只创建一个,所以返回true
System.out.println(s1==s2);
//s1和s3是不同的对象,所以返回false
System.out.println(s1==s3);
//s3和s4是不同的对象,所以返回false
System.out.println(s3==s4);
s1="欢迎来到:"+s1;
//字符串s1被修改,指向新的内存空间
System.out.println(s1);
equals ()方法概念: equals()方法是对象比较函数,按照对象比较,系统默认四个类默写该方法:Integer,String,Date,file 。没有覆写equals()方法的类会调用Object的equals()方法,Object类的equals()方法直接用==实现。 比较过程: 1.首先判断两个比较对象类型是否相同,如果不同返回false。 2.如果相同继续判断对象内容是否相同,如果相同返回true,如果不同返回false。
equals使用方法及注意事项:
e.g1
String s1=new String("a");
String s2=new String("a");
s1.equals(s2);
即使s1与s2并不是同一个对象,但s1与s2的类型相同并且内容一样,此时equals方法返回值为true。
e.g2
String s1=new String("a");
String s2=new String("b");
s1.equals(s2);
s1与s2的类型相同但内容不一样,此时equals方法返回值为false。
e.g3
String s1=null;
String s2=new String("b");
s1.equals(s2);
此时会抛出NullPointException异常,在做equals比较的时候一定要确保调用equals方法的对象不为空。
“==”判等比较概念 "=="是等值比较,比较的是变量的内容。 1.当比较对象为基本数据类型时,比较的是数据的大小。 2.当比较对象为引用类型时,比较的是引用类型中存放的地址。
e.g1
int n1=10;
int n2=10;
n1==n2;
因为n1,n2是基本数据类型,并且数据值相等所以此时返回true。
e.g2
String n1="a";
String n2="b";
n1==n2;
由于字符串"a"创建时是在方法区的常量池中开辟的空间,并且下次使用时可以重复使用,n1,n2指向的地址是相同的,所以判等结果是true。
e.g3
Integer n1=new Integer(45);
Integer n2=new Integer(45);
n1==n2;
n1与n2分别在堆区开辟了空间,两个变量所指向的地址不同,即使指向地址中的内容相同,判等的结果也是为false。
注意:
Integer n1=128;
Integer n2=128;
n1==n2;
Integer n3=127;
Integer n4=127;
n3==n4;
Integer包装类型中存在自动装箱的情况,当数据范围在-128~127之间时,创建的对象会在方法区的常量池中开辟空间(可复用),数据超出范围就会在堆区中开辟空间,由于指向不同对象所以n1==n2判等的结果为false,n3与n4指向常量池同一地址池所以判等结果为true。
查看全部 -
什么是Java中的字符串
创建String对象的方法
//创建一个字符串对象imooc,名为s1
String s1="imooc";
//创建一个空字符串对象,名为s2
String s2=new String();
//创建一个字符串对象imooc,名为s3
String s3=new String("imooc");
查看全部 -
Set集合是无序且不可重复的,只能通过循环遍历或迭代遍历获取里面的元素
查看全部 -
Math 类位于 java.lang 包中,包含用于执行基本数学运算的方法, Math 类的所有方法都是静态方法,所以使用该类中的方法时,可以直接使用类名.方法名,如: Math.round();
常用的方法:
查看全部 -
ava.util.Calendar 类是一个抽象类,可以通过调用 getInstance() 静态方法获取一个 Calendar 对象,此对象已由当前日期时间初始化,即默认代表当前时间,如 Calendar c = Calendar.getInstance();
那么如何使用 Calendar 获取年、月、日、时间等信息呢?我们来看下面的代码:
其中,调用 Calendar 类的 getInstance() 方法获取一个实例,然后通过调用 get() 方法获取日期时间信息,参数为需要获得的字段的值, Calendar.Year 等为 Calendar 类中定义的静态常量。
Calendar 类提供了 getTime() 方法,用来获取 Date 对象,完成 Calendar 和 Date 的转换,还可通过 getTimeInMillis() 方法,获取此 Calendar 的时间值,以毫秒为单位。如下所示:
运行结果:
查看全部 -
1. 使用 format() 方法将日期转换为指定格式的文本
代码中的 “yyyy-MM-dd HH:mm:ss” 为预定义字符串, yyyy 表示四位年, MM 表示两位月份, dd 表示两位日期, HH 表示小时(使用24小时制), mm 表示分钟, ss 表示秒,这样就指定了转换的目标格式,最后调用 format() 方法将时间转换为指定的格式的字符串。
运行结果: 2014-06-11 09:55:48
2. 使用 parse() 方法将文本转换为日期
代码中的 “yyyy年MM月dd日 HH:mm:ss” 指定了字符串的日期格式,调用 parse() 方法将文本转换为日期。
查看全部 -
JAVA中异常处理的类型
查看全部
举报