Java-Java基础03之开发小评分系统与成绩统计查询

项目文件结构
项目文件结构

主要内容有:Java基础中的泛型使用,小评分系统与成绩统计。

泛型与异常

泛型
泛型
泛型
泛型
泛型

Class7b / com.test1 / Test.java

/*  
 * 功能:泛型的必要性  
 */  
  
package com.test1;   
  
import java.util.ArrayList;   
  
public class Test {   
  
    /**  
     * @param args  
     */  
    public static void main(String[] args) {   
        //泛型   
        //System.out.println("a="+(1>>>2));   
        ArrayList<Dog> al=new ArrayList<Dog>();//将ArrayList转成对Dog的泛型   
        //创建一只狗   
        Dog dog1=new Dog();   
        //放入到集合   
        al.add(dog1);   
        //取出   
        //Dog temp=(Dog)al.get(0);   
        //Cat temp2=(Cat)al.get(0);//类型转换错误   
        Dog temp=al.get(0);//因为前定义了ArrayList对Dog泛型,所以不报错   
    }   
  
}   
  
class Dog   
{   
    private String name;   
    private int age;   
    public String getName() {   
        return name;   
    }   
    public void setName(String name) {   
        this.name = name;   
    }   
    public int getAge() {   
        return age;   
    }   
    public void setAge(int age) {   
        this.age = age;   
    }   
       
}   
  
class Cat   
{   
    private String color;   
    private int age;   
    public String getColor() {   
        return color;   
    }   
    public void setColor(String color) {   
        this.color = color;   
    }   
    public int getAge() {   
        return age;   
    }   
    public void setAge(int age) {   
        this.age = age;   
    }   
} 

Class7b / com.test1 / Test2.java

/*  
 * java的反射机制,泛型的经典应用  
 */  
  
package com.test1;   
  
import java.lang.reflect.Method;   
  
public class Test2 {   
  
    /**  
     * @param args  
     */  
    public static void main(String[] args) {   
        //    
        Gen<String> gen1=new Gen<String>("aaa");   
        gen1.showTypeName(gen1);   
        Gen<Integer> gen2=new Gen<Integer>(1);   
        gen2.showTypeName(gen2);   
           
        Gen<Bird> gen3=new Gen<Bird>(new Bird());   
        gen3.showTypeName(gen3);   
    }   
  
}   
  
//定义一个类   
class Gen<T> //定义的一种未知类型T,即泛型   
{   
    private T o;//用泛型定义一个变量(或对象)   
    //构造函数   
    public Gen(T a)   
    {   
        o=a;   
    }   
       
    //得到T的类型名称   
    public void showTypeName(Gen<T> obj)//参数是泛型   
    {   
        System.out.println("类型是:"+o.getClass().getName());   
        //通过反射机制,可以得到T这个类型的很多信息   
        Method[] m=o.getClass().getDeclaredMethods();//得到某个类型的函数   
        //打印   
        for(int i=0;i<m.length;i++)   
        {   
            System.out.println(m[i].getName());   
        }   
    }   
}   
  
//定义一个Bird   
class Bird   
{   
    public void test1()   
    {   
        System.out.println("aa");   
    }   
    public void count(int a,int b)   
    {   
        System.out.println(a+b);   
    }   
}   
  
/*  
 *泛型的优点  
 *1.类型安全  
 *2.向后兼容  
 *3. 层次清晰  
 *4.性能较高,用Gj编写的代码可以为java编译器和虚拟机带来更多的类型信息。  
 *  
 *泛型主要解决安全和代码重用的问题  
 *在没有泛型之前,通过对类型Object的引用来实现参数的"任意化","任意化"  
 *带来的缺点是要做显式的类型转换,而这种转换是要求开发者对实际参数类型  
 *可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示  
 *错误 ,在运行时才出现异常,这是一个安全隐患。  
 *泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐  
 *式的,提高代码的重用率。  
*/

Class7b / com.test1 / Test3.java

/*  
 * 异常  
 */  
  
package com.test1;   
  
import java.io.FileNotFoundException;   
import java.io.FileReader;   
import java.io.IOException;   
import java.net.Socket;   
import java.net.UnknownHostException;   
  
public class Test3 {   
  
    /**  
     * @param args  
     */  
    public static void main(String[] args) {   
        //检查异常    
        //1.打开文件   
        FileReader fr=null;   
        try {   
            fr=new FileReader("d:\\1.txt");   
            //在出现异常的地方,就终止执行代码,然后进入到catch   
            System.out.println("继续!");   
            Socket s=new Socket("192.168.111.111",78);   
        } catch (Exception e1) {//采用Exception可以捕获所有异常,因为它是父类   
            //把异常的信息输出,利于排除bug   
            System.out.println("\nException 内部");   
            System.out.println("message:="+e1.getMessage());   
            //System.exit(-1); //退出JVM   
            e1.printStackTrace();   
            //处理   
        }   
        finally //这个语句块,不管有没有异常都会执行   
        {   
            System.out.println("\n进入finally!");   
            //一般说,把需要关闭的资源[文件,连接,内存....]   
            if(fr!=null)   
            {   
                try {   
                    fr.close();   
                } catch (Exception e) {   
                    e.printStackTrace();   
                }   
            }   
        }   
           
        //2.连接一个192.168.12.12 ip的端口号4567   
        try {   
            Socket s=new Socket("192.168.1.23",78);   
        } catch (UnknownHostException e) {   
            System.out.println("\nUnknownHostException 内部");   
            e.printStackTrace();   
        } catch (IOException e) {   
            //如果有多个catch语句,则进入匹配异常的那个   
            System.out.println("\nIOException 内部");   
            e.printStackTrace();   
        }   
           
        //3.运行异常   
        try  
        {   
            int a=4/0;   
        }catch(ArithmeticException e)   
        {   
            e.printStackTrace();   
        }   
        System.out.println("ok1");   
    }   
}

Class7b / com.test1 / Test4.java

package com.test1;   
  
import java.io.FileNotFoundException;   
import java.io.FileReader;   
  
public class Test4 {   
  
    /**  
     * @param args  
     * @throws Exception   
     */  
    public static void main(String[] args) throws Exception {   
        //异常抛给JVM去处理   
        //创建一个Father   
        Father father=new Father();   
        father.test1();   
    }   
  
}   
  
class Father   
{   
    private Son son=null;   
    public Father()   
    {   
        son=new Son();   
    }   
    public void test1() throws Exception   
    {   
        //异常抛给调用者(main函数)去处理   
        System.out.println("1");   
        /*  
        try {  
            son.test2();  
        } catch (Exception e) {  
            System.out.println("\n父亲在处理!");  
            e.printStackTrace();  
        }  
        */  
        son.test2();   
    }   
}   
  
class Son   
{   
    public void test2() throws FileNotFoundException   
    {   
        //异常抛给调用者(Father.test1函数)去处理   
        FileReader fr=null;   
        fr=new FileReader("d:\\dd.txt");   
    }   
} 

两个练习

HomeWork / com.test1 / Test1.java

/*  
 * 跳水比赛,8个评委打分。运动员的成绩是8个成绩取掉一个最高分,  
 * 去掉一个最低分,剩下的6个分数的平均分就是最后得分。使用一维  
 * 数组实现打分功能。  
 * 找出最佳与最差评委  
 */  
  
package com.test1;   
  
import java.io.BufferedReader;   
import java.io.IOException;   
import java.io.InputStreamReader;   
  
public class Test1 {   
  
    /**  
     * @param args  
     */  
    public static void main(String[] args) {   
        //   
        Judge judge=new Judge();   
        System.out.println("平均分是:"+judge.lastFen());   
        System.out.println("最差的裁判是:"+(judge.getWorst()+1));   
    }   
  
}   
  
class Judge   
{   
    //定义可以存放8个小数的数组   
    float fens[]=null;   
    int size=3;   
    //构造函数   
    public Judge()   
    {   
        fens=new float[size];   
        //初始化   
        InputStreamReader isr=new InputStreamReader(System.in);//读取控制台数据存到输入流   
        BufferedReader br=new BufferedReader(isr);//将数据从输入流存到Buf流中   
        try {   
            for(int i=0;i<fens.length;i++)   
            {   
                System.out.println("请输入第"+(i+1)+"裁判的分数:");   
                fens[i]=Float.parseFloat(br.readLine());   
            }   
        } catch (Exception e) {   
            e.printStackTrace();   
        }   
        finally //关闭IO流   
        {   
            try {   
                br.close();   
            } catch (IOException e) {   
                e.printStackTrace();   
            }   
        }   
    }   
  
    //1.去掉最低分(目的找到最低分的下标)   
    public int getLowFenIndex()   
    {   
        //选择法   
        //认为第一个就是最低   
        float minFen=fens[0];   
        int minIndex=0;   
        for(int i=1;i<fens.length;i++)   
        {   
            if(minFen>fens[i]);   
            {   
                //修改最低分   
                minFen=fens[i];   
                minIndex=i;   
            }   
        }   
        return minIndex;   
    }   
    //2.去掉最高分(目的找到最高分的下标)   
    //2.去掉最高分(目的找到最高分的下标)   
    public int getHighFenIndex()   
    {   
        //选择法   
        //认为第一个就是最高   
        float maxFen=fens[0];   
        int maxIndex=0;   
        for(int i=1;i<fens.length;i++)   
        {   
            if(maxFen<fens[i])   
            {   
                //修改最高分   
                maxFen=fens[i];   
                maxIndex=i;   
            }   
        }   
        return maxIndex;   
    }   
    //3.得到平均分   
    //3.得到运动员的最后得分   
    public float lastFen()   
    {   
        float allFen=0;   
        int minIndex=this.getLowFenIndex();   
        int maxIndex=this.getHighFenIndex();   
        for(int i=0;i<fens.length;i++)   
        {   
            if(i!=minIndex&&i!=maxIndex)   
            {   
                allFen+=fens[i];   
            }   
        }   
        return allFen/(fens.length-2);   
    }   
    //4.得到最差评委   
    public int getWorst()   
    {   
        //假设第一个评委是最差的   
        int worstIndex=0;   
        float tempCai=0f;   
        float cai=Math.abs(fens[0]-lastFen());   
        for(int i=1;i<fens.length;i++)   
        {   
            tempCai=Math.abs(fens[0]-lastFen());   
            if(cai<tempCai)   
            {   
                worstIndex=i;   
                cai=tempCai;   
            }   
        }   
        return worstIndex;   
    }   
} 

HomeWork / com.test1 / Test2.java

// 三个同学考试,共考三门课:语文、数学、英语。使用二维整数   
// 数组存放三个同学的学号和所有科目的考试成绩。如下表:  
// 学号       语文      数学      英语  
// 1002     78      92      76  
// 1003     67      88      80  
// 1007     90      95      80  

package com.test1;

public class Test2 {
    /**
     * @param args
     */
    public static void main(String[] args) {
        //定义一个二维数组 
          
        int[][] stus = {{1002, 78, 23, 56}, {1003, 23, 89, 34}, {1007, 78, 89, 90}};
        
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 4; j++) {
                if (i == 0 && j == 0) {
                    System.out.println("学号\t语文\t数学\t英语\t");
                }
                System.out.print(stus[i][j] + "\t");
            }
            System.out.print("\n");
        }
    }
}

版权所有,转载请注明出处 luowei.github.io.