Java中的一些例子(常用类的应用)
不要自卑,你不比别人笨。不要自满,别人不比你笨。
本篇博客我将对自己学过的一些东西通过直接敲代码,写例子的方式来巩固。
1.制作扑克实例
主要应用集合类,来实现。
public class demo {
public static void main(String[] args) {
ArrayList<String> pokeList = new ArrayList<>();
String[] num = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
String[] color = {"♣", "♠", "♥", "♦"};
for (String s : color) {
for (String s1 : num) {
pokeList.add(s.concat(s1));//形成扑克盒子
}
}
pokeList.add("●");
pokeList.add("○");//手动添加大小王
Collections.shuffle(pokeList);//将扑克打乱,只能传列表
//扑克已经好了,差索引。
HashMap<Integer, String> pokerHashMap = new HashMap<Integer, String>();
ArrayList<Integer> suoying = new ArrayList<>();
for (int i = 0; i <= 53; i++) {
suoying.ad***作索引
}
ArrayList<String> 周润发 = new ArrayList<String>();
ArrayList<String> 周星驰 = new ArrayList<String>();
ArrayList<String> 赌神 = new ArrayList<String>();
ArrayList<String> 底牌 = new ArrayList<String>();
for (int i = 0; i <=53; i++) {
pokerHashMap.put(suoying.get(i), pokeList.get(i));//已经形成一个哈希map扑克,有索引,接下来发牌
if(i>=suoying.size()-3){//留三张底牌
底牌.add(pokerHashMap.get(i));
}
else if ((i % 3 == 0)) {
周润发.add(pokerHashMap.get(i));
} else if ((i % 3 == 1)) {
周星驰.add(pokerHashMap.get(i));
} else if((i%3==2)){
赌神.add(pokerHashMap.get(i));
}
}
lookpoke("周润发",周润发);
lookpoke("周星驰",周星驰);
lookpoke("赌神",赌神);
lookpoke("底牌",底牌);
}
private static void lookpoke(String name,ArrayList ef) {
System.out.println(name);
for (Object o : ef) {
System.out.print(o+" ");
}
System.out.println();
}
}
最后的结果图:
2.复制/删除文件夹(递归)
主要对IO流中的字符流,字节流,通过对象方法来删除/复制文件,首先我们要知道文件夹是直接删除/复制不掉的,但是我们可以删除/复制文件,所以就要不断 的获取文件夹,打开文件夹,删除/复制文件夹下的文件。(递归)
1)复制文件夹
public class CopyFile {
public static void main(String[] args) throws IOException {
String scr="D:\\music";//目标文件夹
String aim="D:\\musss";//目的文件夹
CopyDir(scr,aim);
}
private static void CopyDir(String scr,String aim) throws IOException{
//将每一个文件路径封装成对象进行操作
File scrDir = new File(scr);
File aimDir = new File(aim);
if(!aimDir.exists()){
//判断目的文件夹中是否存在要复制的文件夹,如果没有就创建一个
aimDir.mkdirs();
}
File[] files =scrDir.listFiles();//获取当前文件夹中所有的文件
for (File f : files) {//遍历当前文件夹中的所有文件
if(f.isFile()){
copy(f,aimDir);//复制文件
}else {
//文件类型是文件夹,递归调用,
CopyDir(scrDir+"\\"+f.getName(),aimDir+"\\"+f.getName());
}
}
}
private static void copy(File f,File aimDir) throws IOException{
FileInputStream in = new FileInputStream(f);
FileOutputStream out = new FileOutputStream(new File(aimDir, f.getName()));//注意:File中传参(File,String)
//获取输出输入流对象
int len=0;
byte[] bytes = new byte[1024];//一次复制一个数组,一般是1024*8;
while ((len=in.read(bytes))!=-1){
out.write(bytes,0,len);//复制文件
out.flush();//字符流数据,需要刷新数据
}
//关闭IO流
in.close();
out.close();
}
}
2)删除文件夹
public class RemoveFile {
public static void main(String[] args) {
File scrFile = new File("D:\\musss");//要删除的文件夹
Remove(scrFile);
}
private static void Remove(File scrFile) {
File[] files = scrFile.listFiles();//获取当前文件夹下的所有文件
for (File file : files) {//遍历当前文件夹
if(file.isFile()){//判断,是文件就删除,
file.delete();
}else{//不是文件就继续调用
Remove(file);
file.delete();
}
}
}
}
3.古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问12个月后的兔子总数为多少?
首先,我们对这个进行分析:当我们实在是想不到有什么好办法可以解决这些问题的时候可以列出几个结果,然后从结果中看能不能推出解决问题的方案,要学会到着推!!!
月份 兔子对数
1 1
2 1
3 2
4 3
5 5
6 8
7 13
斐波那契数列:1,1,2,3,5,8,13,21……
所以就相当于计算一个斐波那契数列的和,那么问题就简单了,直接看代码。
public class bron {
public static void main(String[] args) {
int[] ints = new int[12];
ints[0]=1;
ints[1]=1;//给一月份和二月份赋值
for (int i = 2; i <ints.length; i++) {
ints[i]=ints[i-1]+ints[i-2];
}
System.out.println(ints[11]);
}
}
4.小芳的妈妈每天给她2.5元钱,她都会存起来,但是,每当这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱,请问,经过多少天?小芳才可以存到100元钱。
代码如下:
public class money {
public static void main(String[] args) {
int sum = 100;// 最终的目标
double db = 2.5;// 每次存放的钱数
int day = 1;// 天数
double dsum = 0;// 每次存放的总数
while (true) {
dsum = dsum + db;// 返回每天都存放钱的总和
if (day % 5 == 0) {// 判断是不是5的倍数
dsum = dsum - 6;// 从总数中扣去6元
System.out.println("第" + day + "天花去6元,还剩" + dsum + "元!");
}
boolean flag = dsum >= sum;// 求dsum是否大于sum的boolean值
if (flag) { // 如果是true则输出最终的结果,并跳出循环
System.out.println("要经过连续存储" + day + "天,才能存上100元!");
break;
} else {// 否则天数加1,也就是继续存钱
day++;
}
}
}