对最近java基础学习的一次小结
开头想了3分钟,不知道起什么名字好,首先内容有点泛,但也都是基础知识。
对之前所学的java基础知识做了个小结,因为我是跟着网上找的黑马的基础视频看跟着学的,10天的课程硬生生给我看了这么久,也是佛了自己。
  
照着视频中,模拟了一个我们平常玩游戏时的场景,一般我们玩游戏都会找朋友组队开黑,如果朋友不在就会找路人玩,玩得好就会互加好友下次再一起玩,就根据这个场景对前面所学的知识进行了回顾。
不得不说,自己的思维逻辑还是真的不好,摆着的这张图我都有可能想错,唉,最终还是看了一遍视频之后再自己动手的,最开始看到图自己就动手了。结果发现和视频中的对比,自己考虑的还是有所欠缺。
    

上图为2种情况,不得不说这样先大致通过输出语句加上判断输出大概流程,会让人更加有思路有步骤进行,不然会像无头苍蝇,导致到后面东缺一块西缺一块。。。
此处有个点需要考虑下,大致流程虽然已经给出,但是第一步就要写【加载文件的数据到集合中】这步是否可取。因为集合是ArrayList,泛型是自定义的类Hero,所以要读取还是要考虑很多,还有刚开始程序编写,文件中肯定内容是空的。所以此处还是应当默认文件是为空的,无法读取数据到集合中这种情况来,也就是这是个新队伍,先执行创建对象放到集合中。
*1.不要在main方法中写太多代码,应当封装成对应的方法
*2.定义方法时,要确定他的返回值,参数这些内容,因为是创建对象放入集合,所以无需返回值就写void,然后参数自然就是集合了
*3.关于对象的创建,使用之前学习过的键盘输入类Scanner,最开始自己动手时直接就new,采用了写死的方式,这样的代码实属没意义。。。
*4.写一个循环添加5个英雄
  
   调用:
之后输出阵容信息,同理定义一个方法showHeros(),因为是输出信息,所以也无需返回值直接写void,参数自然还是集合
定义一个循环,因为循环次数固定所以采用for循环,在循环中定义对象,并通过对象去调用成员方法,得到想要的值后拼接输出语句输出
   
    调用:
统计阵容的战斗力总和,战斗力总和是个整型,最后要得出这个结果,所以方法的返回值就要定义为int,参数自然就还是集合
定义一个变量作为接受值,循环内累加得到总和,最后return
    
    调用:
现在再来考虑写入文件和读取文件的方法,因为前面已经创建了对象存放到了集合中,所以先来将集合中的内容写入文件,则定义一个方法saveToFile(),参数为集合返回值void
文件写入可以采用FileWrite和BufferedWriter,考虑到BufferedWriter有缓冲区性能更好,所以用后者
因为BufferedWriter是字符流,所以writer()方法只能写字符串或者字符数组,但是集合中存储的又是自定义的类对象,所以当时我是这样的想法,将对象转化为字符串,然后再存进去,百度之后我用了toString(),这个方法,也就是bw.write(hero.toString()),看到没报错信息以为成了,然后就运行了一下,发现写入文件里的都是地址值,如下
 ,然后当时看到这个就以为,下次读取出来就可以还原之前那些对象。。。。然后就开始着手写读取文件存入集合的那部分,最后就是一直卡在怎么获取转换成对象存入集合。事实证明这是行不通的。
,然后当时看到这个就以为,下次读取出来就可以还原之前那些对象。。。。然后就开始着手写读取文件存入集合的那部分,最后就是一直卡在怎么获取转换成对象存入集合。事实证明这是行不通的。
!重点:1.这里写入文件还是要通过字符串写入,所以调用对象的成员方法得到信息后,拼接信息作为字符串写入到文件中
2.后期从文件中读取出来,为了更好的划分,有个区分点来区分那些信息,所以中间加上,来作为标识,后面会用到split()方法
3.记得用上newLine()来另起一行,还有写入完成后close()来关闭资源
    
    调用:
运行后,键盘输入阵容信息,然后输出阵容信息,然后写入文件
    如下为写入后文件中的内容: ,没错就是lol了。。。
,没错就是lol了。。。
看到文件中的内容分别是,名字,战力,类型,所以要把文件中的这些读取重新存放到集合中,而且都是字符串类型的,集合还是之前那个自定义类的集合,就要将内容都获取下来,然后再次定义对象,把这些属性值物归原主放回去。
定义一个加载文件存放到集合的方法loadToList(),参数依然是集合,无返回值void
读取文件,同理考虑到性能我们用BufferedReader(),在循环外面定义一个字符串变量用于接收,通过循环读取文件中的内容,赋值给变量
!重点:1.之前写入数据到文件时,我们用,分隔开,现在派上用场了,定义一个字符串类型的数组array,用于接收个部分信息
2.使用split()方法,传入,作为分隔符,然后将获取到的字符串分割成3部分分别存入数组中
3.上面文件内容知道,由名字+战力+类别,定义3个字符串分别接收数组中的值
*这里战力在文件中是属于字符串,但是自定义的类中成员变量是int,所以这里要把字符串转化为整型,这里使用Integer.parseInt()方法将字符串转化为整型
4.在循环中new对象,三个接收值作为参数传入,将对象在通过add方法加入集合
    
     调用:
    这样就完成了代码的全部编写,代码运行结果:
贴上全部代码:demoGame.java
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
public class demoGame {
public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//1.首先建立一个集合,用来存储5个英雄
		ArrayList<Hero> list = new ArrayList();
//2.读文件,将数据读取到集合中
		loadToList(list);
//		list.add(new Hero());
		//3.判断是不是一个新集合
		boolean isNew = list.isEmpty();
		System.out.println("这是不是个新的集合"+isNew);
		//如果队伍不是新的  就无需再创建
//如果是新队伍,就创建5个对象加入到集合中
		if(isNew){
		//System.out.println("创建5个对象到集合中");
			addHero(list);
		}
//输出队伍信息
		System.out.println("我们的阵容是");
		//遍历集合,输出每个对象的具体信息
		showHeros(list);
//统计一下战斗力总和
		int totalAttack = heroPower(list);
		System.out.println("战斗力总和是"+totalAttack);
//判断集合是不是新的,新的就
		if(isNew){
//			System.out.println("将集合的数据写写到文件中");
			saveToFile(list);
		}
	}
	//定义一个将文件中的内容读取放到集合中的方法loadToList()
			public static void loadToList(ArrayList<Hero> list) throws IOException{
				BufferedReader br = new BufferedReader(new FileReader("hero.txt"));
				String line;
				while((line = br.readLine())!=null){
					String[] array = line.split(",");
					String name = array[0];
					int attack = Integer.parseInt(array[1]);
					String type = array[2];
					Hero hero = new Hero(name,attack,type);
					list.add(hero);
				}
				br.close();
			}
//定义个将集合中的内容写入文件的方法saveToFile()
			public static void saveToFile(ArrayList<Hero> list) throws IOException{
				BufferedWriter bw = new BufferedWriter(new FileWriter("hero.txt"));
				for(int i=0;i<5;i++){
					Hero hero = list.get(i);
					String str = hero.getName()+","+hero.getAttcakPower()+","+hero.getType();
					bw.write(str);
					bw.newLine();
				}
				bw.close();
			}
//定义一个添加英雄的方法addHero()
			public static void addHero(ArrayList<Hero> list){
				Scanner sc = new Scanner(System.in);
				for(int i=1;i<=5;i++){
					System.out.println("请输入第"+i+"个英雄名称:");
					String heroName = sc.next();
					System.out.println("请输入第"+i+"个英雄战力:");
					int attackPower = sc.nextInt();
					System.out.println("请输入第"+i+"个英雄类别:");
					String type = sc.next();
					Hero hero = new Hero(heroName,attackPower,type);
					list.add(hero);
				}
}
	//定义一个循环输出英雄信息的方法showHeros()
			public static void showHeros(ArrayList<Hero> list){
				for(int i=0;i<5;i++){
					Hero hero=list.get(i);
					System.out.println(hero.getType()+":"+hero.getName()+",战斗力是:"+hero.getAttcakPower());
				}
			}
	//定义一个计算英雄战斗力总和的方法,返回整型所以返回值是int
			public static int heroPower(ArrayList<Hero> list){
					int totalAttack = 0;
				for(int i=0;i<5;i++){
					Hero hero = list.get(i);
					totalAttack += hero.getAttcakPower();
				}
				return totalAttack;
			}
}
Hero.java
public class Hero {
	private String name;
	private int attcakPower;
	private String type;
public Hero(String name,int attcakPower,String type){
		this.name = name;
		this.attcakPower = attcakPower;
		this.type = type;
	}
public String getName() {
		return name;
	}
public String getType() {
		return type;
	}
public void setType(String type) {
		this.type = type;
	}
public void setName(String name) {
		this.name = name;
	}
public int getAttcakPower() {
		return attcakPower;
	}
public void setAttcakPower(int attcakPower) {
		this.attcakPower = attcakPower;
	}
}
无法自制的人得不到自由~坚持加油!
对最近java基础学习的一次小结的更多相关文章
- Java基础学习-- 继承 的简单总结
		代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ... 
- Java基础学习中一些词语和语句的使用
		在Java基础学习中,我们刚接触Java会遇到一些词和语句的使用不清的情况,不能很清楚的理解它的运行效果会是怎么样的,如:break,continue在程序中运行效果及跳转位置, 1.先来看看brea ... 
- Java基础学习笔记总结
		Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ... 
- 转载-java基础学习汇总
		共2页: 1 2 下一页 Java制作证书的工具keytool用法总结 孤傲苍狼 2014-06-24 11:03 阅读:25751 评论:3 Java基础学习总结——Java对象的序列化和 ... 
- java基础学习总结——开篇
		java是我学习的第一门编程语言,当初学习java基础的时候下了不少功夫,趁着这段时间找工作之际,好好整理一下以前学习java基础时记录的笔记,当作是对java基础学习的一个总结吧,将每一个java的 ... 
- Java基础学习笔记(一)
		Java基础学习笔记(一) Hello World 基础代码学习 代码编写基础结构 class :类,一个类即一个java代码,形成一个class文件,写于每个代码的前端(注意无大写字母) XxxYy ... 
- java基础学习总结——java环境变量配置(转)
		只为成功找方法,不为失败找借口! 永不放弃,一切皆有可能!!! java基础学习总结——java环境变量配置 前言 学习java的第一步就要搭建java的学习环境,首先是要安装 JDK,JDK安装好之 ... 
- JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API
		森林森 一份耕耘,一份收获 博客园 首页 新随笔 联系 管理 订阅 随笔- 397 文章- 0 评论- 78 JAVA基础学习day16--集合三-Map.HashMap,TreeMap与常用A ... 
- 尚学堂JAVA基础学习笔记
		目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ... 
随机推荐
- ab网站压力测试命令的参数、输出结果的中文注解
			ab命令原理 Apache的ab命令模拟多线程并发请求,测试服务器负载压力,也可以测试nginx.lighthttp.IIS等其它Web服务器的压力. ab命令对发出负载的计算机要求很低,既不会占用很 ... 
- Linux下七牛云存储qrsync命令行上传同步工具
			原址:https://m.aliyun.com/yunqi/ziliao/54370 VPS数据备份是一个重要的工作,之前在文章:使用七牛云存储自动备份VPS数据分享过使用七牛云存储提供的工具QRSB ... 
- Python - 格式化字符串的用法
			0. 摘要 Python支持多种格式化字符串的方法,包括%-fromatting.str.format().f-strings三种,f-strings是Python3.6以后出现的一种新方法,相比其他 ... 
- Java并发编程--6.Exchanger线程间交换数据
			在两个线程之间定义同步点,当两个线程都到达同步点时,他们交换数据结构,因此第一个线程的数据结构进入到第二个线程中,第二个线程的数据结构进入到第一个线程中 在生产者-消费者情境模式中它包含了一个数缓冲区 ... 
- [翻译]怎么写一个React组件库(一)
			本文同步发布于知乎专栏 https://zhuanlan.zhihu.com/p/27401329,喜欢本文的就去知乎点个赞支持下吧- 引言 该系列文章将通过创建一个组件库来引导你学习如何构建自己的组 ... 
- 打包dll发布到nuget服务器
			几个月前上传过一次nuget包,结果好久不用,今天想更新下,完全忘记了怎么用了,又是一顿查,所以决定记录下来,当然这可能不是一个傻瓜式的教程,但聪明的你们应该能够看明白的,因为整体操作还是很简单的 好 ... 
- 真机测试出现INSTALL_FAILED_USER_RESTRICTED安装错误
			之前用小米测试的时候遇到一个问题,两个一样型号的手机一个能直接用Android Studio安装公司的项目一个却不可以,总是报INSTALL_FAILED_USER_RESTRICTED错误,具体见下 ... 
- 【转】matplotlib制图——图例legend
			转自:https://www.cnblogs.com/alimin1987/p/8047833.html import matplotlib.pyplot as pltimport numpy as ... 
- Jmeter之断言
			Jmeter中的断言类似于LR中的检查点,是在请求的返回层面上加的一个判断机制.因为请求成功了,不代表结果就一定是对的,还要看返回(LR中亦如此,脚本回放没报错,不代表你的业务成功了,需要自己去相应的 ... 
- c实现 简单的文件管理 不含交互
			实现如下功能: 1.读取指定目录下的所有子目录和文件信息(比如:指定目录为C:/temp则把此目录 下的所有子目录下的文件信息读出来)2.在C盘创建一个以个人姓名命名的目录(比如:张三)3.在目录下创 ... 
