zoukankan      html  css  js  c++  java
  • 对最近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了。。。

        看到文件中的内容分别是,名字,战力,类型,所以要把文件中的这些读取重新存放到集合中,而且都是字符串类型的,集合还是之前那个自定义类的集合,就要将内容都获取下来,然后再次定义对象,把这些属性值物归原主放回去。

        定义一个加载文件存放到集合的方法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;
    }


    }

        无法自制的人得不到自由~坚持加油!

        

      

         

       

  • 相关阅读:
    css div中加入滚动条
    oracle创建表主键触发器
    SQL Server 日志满的处理方法(转)
    Asp.net 设置页面自动刷新
    设置DataGrid可读取中隐藏列数据
    用JavaScript获取Asp.net服务器端控件CheckBoxList的选中值数组(转)
    AutoLISP查询椭圆的相关属性
    AutoLISP查询圆弧的相关属性
    关于性格内向者的10个误解
    AutoLISP查询图元信息
  • 原文地址:https://www.cnblogs.com/kingxyt06/p/10159657.html
Copyright © 2011-2022 走看看