Data Calendar类 拆/装箱 基类与字符串转换 Iterator 增强for Lambda 泛型 斗地主
目录
Iterator迭代器(集合专用的遍历方式)
迭代器底层源码
增强for循环
Lambda表达式遍历
forEach()
泛型:
泛型类
泛型方法
泛型接口
泛型通配符
斗地主综合案例
package a09text;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Data {
public static void main(String[] args) throws ParseException {
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的生日,格式为:yyyy-MM-dd");
String birthdayDataString = sc.next();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date birthdayData = sdf.parse(birthdayDataString);
long birthdayDataTime = ((Date) birthdayData).getTime();
long todayTime = new Date().getTime();
long time = todayTime - birthdayDataTime;
System.out.println(time / 100 / 60 / 60 / 24);
}
}
calendar类
3.2 常用方法
方法名 | 说明 |
---|---|
public static Calendar getInstance() | 获取一个它的子类GregorianCalendar对象。 |
public int get(int field) | 获取某个字段的值。field参数表示获取哪个字段的值, 可以使用Calender中定义的常量来表示: Calendar.YEAR : 年 Calendar.MONTH :月 Calendar.DAY_OF_MONTH:月中的日期 Calendar.HOUR:小时 Calendar.MINUTE:分钟 Calendar.SECOND:秒 Calendar.DAY_OF_WEEK:星期 |
public void set(int field,int value) | 设置某个字段的值 |
public void add(int field,int amount) | 为某个字段增加/减少指定的值 |
3.3 get方法示例
public class Demo {
public static void main(String[] args) {
//1.获取一个GregorianCalendar对象
Calendar instance = Calendar.getInstance();//获取子类对象
//2.打印子类对象
System.out.println(instance);
//3.获取属性
int year = instance.get(Calendar.YEAR);
int month = instance.get(Calendar.MONTH) + 1;//Calendar的月份值是0-11
int day = instance.get(Calendar.DAY_OF_MONTH);
int hour = instance.get(Calendar.HOUR);
int minute = instance.get(Calendar.MINUTE);
int second = instance.get(Calendar.SECOND);
int week = instance.get(Calendar.DAY_OF_WEEK);//返回值范围:1--7,分别表示:"星期日","星期一","星期二",...,"星期六"
System.out.println(year + "年" + month + "月" + day + "日" +
hour + ":" + minute + ":" + second);
System.out.println(getWeek(week));
}
//查表法,查询星期几
public static String getWeek(int w) {//w = 1 --- 7
//做一个表(数组)
String[] weekArray = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
// 索引 [0] [1] [2] [3] [4] [5] [6]
//查表
return weekArray[w - 1];
}
}
3.4 set方法示例:
public class Demo {
public static void main(String[] args) {
//设置属性——set(int field,int value):
Calendar c1 = Calendar.getInstance();//获取当前日期
//计算班长出生那天是星期几(假如班长出生日期为:1998年3月18日)
c1.set(Calendar.YEAR, 1998);
c1.set(Calendar.MONTH, 3 - 1);//转换为Calendar内部的月份值
c1.set(Calendar.DAY_OF_MONTH, 18);
int w = c1.get(Calendar.DAY_OF_WEEK);
System.out.println("班长出生那天是:" + getWeek(w));
}
//查表法,查询星期几
public static String getWeek(int w) {//w = 1 --- 7
//做一个表(数组)
String[] weekArray = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
// 索引 [0] [1] [2] [3] [4] [5] [6]
//查表
return weekArray[w - 1];
}
}
3.5 add方法示例:
public class Demo {
public static void main(String[] args) {
//计算200天以后是哪年哪月哪日,星期几?
Calendar c2 = Calendar.getInstance();//获取当前日期
c2.add(Calendar.DAY_OF_MONTH, 200);//日期加200
int y = c2.get(Calendar.YEAR);
int m = c2.get(Calendar.MONTH) + 1;//转换为实际的月份
int d = c2.get(Calendar.DAY_OF_MONTH);
int wk = c2.get(Calendar.DAY_OF_WEEK);
System.out.println("200天后是:" + y + "年" + m + "月" + d + "日" + getWeek(wk));
}
//查表法,查询星期几
public static String getWeek(int w) {//w = 1 --- 7
//做一个表(数组)
String[] weekArray = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
// 索引 [0] [1] [2] [3] [4] [5] [6]
//查表
return weekArray[w - 1];
}
}
不同的月可能有不同的天数, 有的是30天, 有的是31天, 对于二月的天数判断还得先判断是平年还是闰年, 所以如果自己写代码判断会比较麻烦, 其实java.util.Calendar中已经提供了获取天数的方法, 代码如下:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateUtil {
public static int getDaysOfMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
}
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(getDaysOfMonth(sdf.parse("2015-02-2")));
}
}
拆箱与装箱
基本类型与字符串转换 Collection集合:
Iterator迭代器(集合专用的遍历方式)
it.remove();从迭代器指向的collection中移除迭代器返回的最后一个元素
//.获取迭代器对象
//迭代器就好比是一个箭头,默认指向集合的0索引处
Iterator<String> it = coll.iterator();
//3.利用循环不断的去获取集合中的每一个元素
while(it.hasNext()){
//4.next方法的两件事情:获取元素并移动指针
String str = it.next();
System.out.println(str);
}
//当上面循环结束之后,迭代器的指针已经指向了最后没有元素的位置
//System.out.println(it.next());//NoSuchElementException
//迭代器遍历完毕,指针不会复位
System.out.println(it.hasNext());
//如果我们要继续第二次遍历集合,只能再次获取一个新的迭代器对象
Iterator<String> it2 = coll.iterator();
while(it2.hasNext()){
String str = it2.next();
System.out.println(str);
}
迭代器底层源码
增强for循环
快速生成方式:集合名字+for+回车
函数式编程思想:
面向对象思想:
做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情
函数式编程思想:
只要能获取到结果,谁做,怎么做都不重要,重要的是结果,不重视过程
Lambda表达式遍历 forEach()
泛型:
泛型只支持引用数据类型;为什么泛型中不能写基本数据类型:
在集合运行,数据存入集合的时候,会转换成Object类型,取出的时候再装箱;
而基本类型无法转成Object
泛型类
E element元素 ;T type 类型 ; K key ; V value.
泛型方法
泛型接口
{泛型不具备继承性,但是数据具备继承性
//创建集合的对象
ArrayList<Ye> list1 = new ArrayList<>();
ArrayList<Fu> list2 = new ArrayList<>();
ArrayList<Zi> list3 = new ArrayList<>();
//调用method方法
//method(list1);
//method(list2); //泛型不能继承
//method(list3);
list1.add(new Ye());
list1.add(new Fu());
list1.add(new Zi());
}
public static void method(ArrayList<Ye> list) {
}
}
class Ye { }
class Fu extends Ye { }
class Zi extends Fu { }
泛型通配符
斗地主综合案例
import java.util.ArrayList;
import java.util.Collections;
public class dizhu {
public static void main(String[] args) {
//1.准备牌 定义一个存储54张牌的ArrayList集合,泛型使用String
ArrayList<String> poker = new ArrayList<>();
//定义两个数组,一个数组存储花色 一个存储牌序号
String[] colors = {"♠", "♥", "♣", "♦"};
String[] numbers = {"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"};
//把大小王存储到poker中
poker.add("大王");
poker.add("小王");
//循环嵌套遍历两个数组,组装52张牌
for (String number : numbers) {
for (String color : colors) {
//System.out.println(color + number);
//把组装好了的牌存储到poker集合中
poker.add(color + number);
}
}
//2.洗牌
//使用集合的工具类Collections中的方法
//static void shuffle(List<?> list) 使用默认随机源对指定列表进行置换
Collections.shuffle(poker);
//3.发牌
//定义三个集合存储 玩家的牌,一个集合存储三张底牌
ArrayList<String> player01 = new ArrayList<>();
ArrayList<String> player02 = new ArrayList<>();
ArrayList<String> player03 = new ArrayList<>();
ArrayList<String> diPai = new ArrayList<>();
//使用poker集合的索引%3 给3个玩家轮流发牌
//注意: 先判断底牌(i>=51) 否则三张底牌发没了
for (int i = 0; i < poker.size(); i++) {
String p = poker.get(i); //获取每一张牌
if (i >= 51) diPai.add(p); //最后三张给底牌
else if (i % 3 == 0) player01.add(p);
else if (i % 3 == 1) player02.add(p);
else if (i % 3 == 2) player03.add(p);
}
//4.看牌
System.out.println("刘德华的牌:" + player01);
System.out.println("周润发的牌:" + player02);
System.out.println("周星驰的牌:" + player03);
System.out.println("底牌:" + diPai);
}
}
泛型案例
{ ArrayList<PersianCat> list1 = new ArrayList<>();
ArrayList<LiHuaCat> list2 = new ArrayList<>();
ArrayList<TeddyDog> list3 = new ArrayList<>();
ArrayList<HuskyDog> list4 = new ArrayList<>();
keepPet(list1);
keepPet(list2);
keepPet(list3);
keepPet(list4);
}
//该方法能养所有的动物,但是不能传递其他类型
public static void keepPet(ArrayList<? extends Animal> list){
//遍历集合,调用动物的eat方法
}
// 要求2:该方法能养所有品种的狗,但是不能养猫
public static void keepPet(ArrayList<? extends Dog> list){
//遍历集合,调用动物的eat方法
}
本文来自博客园,作者:软工菜鸡,转载请注明原文链接:https://www.cnblogs.com/SElearner/p/17676724.html