• 201771010101 白玛次仁 《2018面向对象程序设计(Java)》第十周学习总结


    实验十  泛型程序设计技术

    实验时间 2018-11-1

    学习总结

    泛型:也称参数化类型(parameterized type),就是在定义类、接口和方法时,通过类型参数指示将要处理的对象类型。(如ArrayList类)

    泛型程序设计(Generic programming):编写代码可以被很多不同类型的对象所重用。

    一个泛型类(generic class)就是具有一个或多个类型变量的类,即创建用类型作为参数的类。

    如一个泛型类定义格式如下:

    class Generics<K,V>其中的K和V是类中的可变类型参数。

    Pair类引入了一个类型变量T,用尖括号(<>)括起来,并放在类名的后面。

    泛型类可以有多个类型变量

    泛型方法可以声明在泛型类中,也可以声明在普通类中。

    NumberGeneric类所能处理的泛型变量类型需和Number有继承关系;

    extends关键字所声明的上界既可以是一个类,也可以是一个接口。

    通过使用super关键字可以固定泛型参数的类型为某种类型或者其超类。

    泛型类可扩展或实现其它的泛型类。

    T表示一种未知类型,而“?”表示任何一种类型。

    单独的?,用于表示任何类型。

     ? extends type,表示带有上界。

     ? super type,表示带有下界。

    定义一个泛型类时,在“<>”内定义形式类型参数,

    例如:“class TestGeneric<K, V>”,其中“K” , “V”不代表值,而是表示类型。

    l 实例化泛型对象的时候,一定要在类名后面指定类型参数的值(类型),一共要有两次书写。例如:

    TestGeneric<String, String> t=new TestGeneric<String, String>();

    l 泛型中<T extends Object>, extends并不代表继承,它是类型范围限制。泛型类不是协变的。

     

    1、实验目的与要求

    (1) 理解泛型概念;

    (2) 掌握泛型类的定义与使用;

    (3) 掌握泛型方法的声明与使用;

    (4) 掌握泛型接口的定义与实现;

    (5)了解泛型程序设计,理解其用途。

    2、实验内容和步骤

    实验1 导入第8章示例程序,测试程序并进行代码注释。

    测试程序1:

    编辑、调试、运行教材311312 代码,结合程序运行结果理解程序;

    在泛型类定义及使用代码处添加注释;

    掌握泛型类的定义及使用。 

    package pair1;

    /**

     * @version 1.01 2012-01-26

     * @author Cay Horstmann

     */

    public class PairTest1

    {

       public static void main(String[] args)

       {

          String[] words = { "Mary", "had", "a", "little", "lamb" };

          Pair<String> mm = ArrayAlg.minmax(words);

          System.out.println("min = " + mm.getFirst());

          System.out.println("max = " + mm.getSecond());

       }

    }

       class ArrayAlg

    //泛型类

    {

       /**

        * Gets the minimum and maximum of an array of strings.

        * @param a an array of strings

        * @return a pair with the min and max value, or null if a is null or empty

        */

       public static Pair<String> minmax(String[] a)

    //用泛型Pair类

       {

          if (a == null || a.length == 0) return null;

          String min = a[0];

          String max = a[0];

          for (int i = 1; i < a.length; i++)

          {

             if (min.compareTo(a[i]) > 0) min = a[i];

             if (max.compareTo(a[i]) < 0) max = a[i];

          }

          return new Pair<>(min, max);

       }

    }

    package pair1;

    /**

     * @version 1.00 2004-05-10

     * @author Cay Horstmann

     */public class Pair<T>

    //Pair类引入了一个类型变量T,用尖括号(<>)括起来,并放在类名的后面。{

       private T first;   

    private T second;    

    public Pair() {

    first = null; second = null;

    }   

    public Pair(T first, T second) {

    this.first = first;  this.second = second;

    }    

    public T getFirst() {

    return first;

     public T getSecond() { return second;

    }   

     public void setFirst(T newValue) { first = newValue;

    }   

    public void setSecond(T newValue) {

    second = newValue;

    }}

    测试程序2

    编辑、调试运行教材315 PairTest2,结合程序运行结果理解程序;

    在泛型程序设计代码处添加相关注释;

    泛型方法、泛型变量限定的定义及用途。

    package pair2;import java.time.*;

    /** 

    * @version 1.02 2015-06-21

     * @author Cay Horstmann 

    */public class PairTest2{   

    public static void main(String[] args)   { 

         LocalDate[] birthdays =          {       

          LocalDate.of(1906, 12, 9), // G. Hopper          

      LocalDate.of(1815, 12, 10), // A. Lovelace       

         LocalDate.of(1903, 12, 3), // J. von Neumann         

       LocalDate.of(1910, 6, 22), // K. Zuse       

      };    

      Pair<LocalDate> mm = ArrayAlg.minmax(birthdays);   

       //Pair中定义一个LocalDate类的birthdays数组    

      System.out.println("min = " + mm.getFirst());    

      System.out.println("max = " + mm.getSecond()); 

      }}

    class ArrayAlg//泛型类ArrayAlg{  

     /**      Gets the minimum and maximum of an array of objects of type T.    

      @param a an array of objects of type T    

      @return a pair with the min and max value, or null if a is       null or empty

       */   public static <T extends Comparable> Pair<T> minmax(T[] a)    //使用extends关键字,定义泛型变量的上界,调用Comparable接口   

    {      

    if (a == null || a.length == 0) return null;     

     T min = a[0];      T max = a[0];     

     for (int i = 1; i < a.length; i++)      {   

          if (min.compareTo(a[i]) > 0) min = a[i];      

       if (max.compareTo(a[i]) < 0) max = a[i];     

     }     

     return new Pair<>(min, max); 

      }

    }

    package pair2;

    /**

     * @version 1.00 2004-05-10

     * @author Cay Horstmann

     */

    public class Pair<T>

    {

       private T first;

       private T second;

       public Pair() { first = null; second = null; }

       public Pair(T first, T second) { this.first = first;  this.second = second; }

       public T getFirst() { return first; }

       public T getSecond() { return second; }

       public void setFirst(T newValue) { first = newValue; }

       public void setSecond(T newValue) { second = newValue; }

    }

     

    测试程序3

    用调试运行教材335 PairTest3,结合程序运行结果理解程序;

    了解通配符类型的定义及用途。

    package pair3;

    /**

     * @version 1.01 2012-01-26 

    * @author Cay Horstmann 

    */public class PairTest3{ 

      public static void main(String[] args)   {  

        Manager ceo = new Manager("Gus Greedy", 800000, 2003, 12, 15);   

       Manager cfo = new Manager("Sid Sneaky", 600000, 2003, 12, 15);    

      Pair<Manager> buddies = new Pair<>(ceo, cfo);      

          printBuddies(buddies);      

     ceo.setBonus(1000000); 

         cfo.setBonus(500000);    

      Manager[] managers = { ceo, cfo };    

       Pair<Employee> result = new Pair<>();     

     minmaxBonus(managers, result);      

    System.out.println("first: " + result.getFirst().getName()          + ", second: " + result.getSecond().getName());   

       maxminBonus(managers, result);    

      System.out.println("first: " + result.getFirst().getName()          + ", second: " + result.getSecond().getName()); 

      }    

    public static void printBuddies(Pair<? extends Employee> p)   {     

     Employee first = p.getFirst();   

       Employee second = p.getSecond(); 

         System.out.println(first.getName() + " and " + second.getName() + " are buddies.");  

     }    

    public static void minmaxBonus(Manager[] a, Pair<? super Manager> result)   {      

    if (a.length == 0) return;      Manager min = a[0];   

       Manager max = a[0];      for (int i = 1; i < a.length; i++)      {  

           if (min.getBonus() > a[i].getBonus()) min = a[i];        

     if (max.getBonus() < a[i].getBonus()) max = a[i];   

       }     

     result.setFirst(min);   

       result.setSecond(max); 

      }   

     public static void maxminBonus(Manager[] a, Pair<? super Manager> result)   {   

       minmaxBonus(a, result);      

    PairAlg.swapHelper(result);

    // OK--swapHelper captures wildcard type   }   

    // Can't write public static <T super manager> ...}class PairAlg{   public static boolean hasNulls(Pair<?> p)   {   

       return p.getFirst() == null || p.getSecond() == null;   }    public static void swap(Pair<?> p) { swapHelper(p);

    }    

    public static <T> void swapHelper(Pair<T> p)   {      

    T t = p.getFirst(); 

         p.setFirst(p.getSecond());      p.setSecond(t);   

    }}

    package pair3;

    /** * @version 1.00 2004-05-10

     * @author Cay Horstmann

    */public class Pair<T> { 

      private T first;   private T second;    public Pair() { first = null; second = null;

    }   

    public Pair(T first, T second) { this.first = first;  this.second = second;

    }    

    public T getFirst() { return first;

    }  

     public T getSecond() { return second;

    }   

     public void setFirst(T newValue) { first = newValue;

    }   

    public void setSecond(T newValue) { second = newValue;

    }}

    package pair3;

    import java.time.*;public class Employee{   

      private String name;   

    private double salary; 

      private LocalDate hireDay;  

      public Employee(String name, double salary, int year, int month, int day)   {  

        this.name = name;  

        this.salary = salary;   

       hireDay = LocalDate.of(year, month, day);  

     } 

       public String getName()   {    

      return name; 

      }   

     public double getSalary()   {  

          return salary;   

    }    public LocalDate getHireDay()   {   

         return hireDay;

       }    public void raiseSalary(double byPercent)   {  

          double raise = salary * byPercent / 100;   

       salary += raise; 

      }}

    package pair3;

    public class Manager extends Employee{  

       private double bonus;   

     /**      @param name the employee's name     

     @param salary the salary   

       @param year the hire year      

    @param month the hire month 

         @param day the hire day 

      */   public Manager(String name, double salary, int year, int month, int day)   {

           super(name, salary, year, month, day);     

     bonus = 0;   }    public double getSalary()   {   

        double baseSalary = super.getSalary();     

     return baseSalary + bonus; 

      }    public void setBonus(double b)   {     

       bonus = b;  

     }    public double getBonus()   {     

       return bonus;  

     }

    }

    实验2编程练习:

    编程练习1:实验九编程题总结

    实验九编程练习1总结(从程序总体结构说明、模块说明,目前程序设计存在的困难与问题三个方面阐述)。

    实验九编程练习2总结(从程序总体结构说明、模块说明,目前程序设计存在的困难与问题三个方面阐述)。

    编程练习2:采用泛型程序设计技术改进实验九编程练习2,使之可处理实数四则运算,其他要求不变。

    package XOI;
    import java.util.Random;
    import java.util.Scanner;

    import java.io.FileNotFoundException;

    import java.io.PrintWriter;

    public class Main{
        public static void main(String[] args)
        {
            
            yunsuan counter=new yunsuan();//与其它类建立联系
        PrintWriter out=null;
        try {
            out=new PrintWriter("D:/text.txt");//将文件里的内容读入到D盘名叫text
             
        }catch(FileNotFoundException e) {
            System.out.println("文件找不到");
            e.printStackTrace();
        }
        
        
        int sum=0;

        for(int i=0;i<10;i++)
        {
        int a=new Random().nextInt(100);
        int b=new Random().nextInt(100);
        Scanner in=new Scanner(System.in);
        //in.close();
        
        switch((int)(Math.random()*4))
        
        {
        
        case 0:
            System.out.println( ""+a+"+"+b+"=");
            
            int c1 = in.nextInt();
            out.println(a+"+"+b+"="+c1);
            if (c1 == counter.plus(a, b)) {
                sum += 10;
                System.out.println("答案正确");
            }
            else {
                System.out.println("答案错误");
            }
            
            break ;
        case 1:
            if(a<b)
                            {
                                     int temp=a;
                                     a=b;
                                     b=temp;
                                 }//为避免减数比被减数大的情况

             System.out.println(""+a+"-"+b+"=");
             /*while((a-b)<0)
             {  
                 b = (int) Math.round(Math.random() * 100);
                 
             }*/
            int c2 = in.nextInt();
            
            out.println(a+"-"+b+"="+c2);
            if (c2 == counter.minus(a, b)) {
                sum += 10;
                System.out.println("答案正确");
            }
            else {
                System.out.println("答案错误");
            }
             
            break ;
        
          

        
        case 2:
            
             System.out.println(""+a+"*"+b+"=");
            int c = in.nextInt();
            out.println(a+"*"+b+"="+c);
            if (c == counter.multiply(a, b)) {
                sum += 10;
                System.out.println("答案正确");
            }
            else {
                System.out.println("答案错误");
            }
            break;
        case 3:
            
            
             
            while(b==0)
            {  b = (int) Math.round(Math.random() * 100);//满足分母不为0
            }
            while(a%b!=0)
            {
                  a = (int) Math.round(Math.random() * 100);
                  b = (int) Math.round(Math.random() * 100);
            }
            System.out.println(""+a+"/"+b+"=");
         int c0= in.nextInt();
        
         out.println(a+"/"+b+"="+c0);
         if (c0 == counter.divide(a, b)) {
             sum += 10;
             System.out.println("答案正确");
         }
         else {
             System.out.println("答案错误");
         }
        
         break;
         

        }
        }
        System.out.println("totlescore:"+sum);
        out.println(sum);
        
        out.close();
        }
     }

    package XOI;
    public class yunsuan <T>{
        private T a;
        private T b;
        public void yunsaun()
        {
            a=null;
            b=null;
        }
        public void yunsuan(T a,T b)
        {
            this.a=a;
            this.b=b;
        }
       public int plus(int a,int b)
       {
           return a+b;
           
       }
       public int minus(int a,int b)
       {
        return a-b;
           
       }
       public int multiply(int a,int b)
       {
           return a*b;
       }
       public int divide(int a,int b)
       {
           if(b!=0  && a%b==0)
           return a/b;
           else
               return 0;
       }
       }

    实验总结:复习以前的实验内容,更好了解泛型概念。

    实验十  泛型程序设计技术

    实验时间 2018-11-1

    学习总结

    泛型:也称参数化类型(parameterized type),就是在定义类、接口和方法时,通过类型参数指示将要处理的对象类型。(如ArrayList类)

    泛型程序设计(Generic programming):编写代码可以被很多不同类型的对象所重用。

    一个泛型类(generic class)就是具有一个或多个类型变量的类,即创建用类型作为参数的类。

    如一个泛型类定义格式如下:

    class Generics<K,V>其中的K和V是类中的可变类型参数。

    Pair类引入了一个类型变量T,用尖括号(<>)括起来,并放在类名的后面。

    泛型类可以有多个类型变量

    泛型方法可以声明在泛型类中,也可以声明在普通类中。

    NumberGeneric类所能处理的泛型变量类型需和Number有继承关系;

    extends关键字所声明的上界既可以是一个类,也可以是一个接口。

    通过使用super关键字可以固定泛型参数的类型为某种类型或者其超类。

    泛型类可扩展或实现其它的泛型类。

    T表示一种未知类型,而“?”表示任何一种类型。

    单独的?,用于表示任何类型。

     ? extends type,表示带有上界。

     ? super type,表示带有下界。

    定义一个泛型类时,在“<>”内定义形式类型参数,

    例如:“class TestGeneric<K, V>”,其中“K” , “V”不代表值,而是表示类型。

    l 实例化泛型对象的时候,一定要在类名后面指定类型参数的值(类型),一共要有两次书写。例如:

    TestGeneric<String, String> t=new TestGeneric<String, String>();

    l 泛型中<T extends Object>, extends并不代表继承,它是类型范围限制。泛型类不是协变的。

     

    1、实验目的与要求

    (1) 理解泛型概念;

    (2) 掌握泛型类的定义与使用;

    (3) 掌握泛型方法的声明与使用;

    (4) 掌握泛型接口的定义与实现;

    (5)了解泛型程序设计,理解其用途。

    2、实验内容和步骤

    实验1 导入第8章示例程序,测试程序并进行代码注释。

    测试程序1:

    编辑、调试、运行教材311312 代码,结合程序运行结果理解程序;

    在泛型类定义及使用代码处添加注释;

    掌握泛型类的定义及使用。 

    package pair1;

    /**

     * @version 1.01 2012-01-26

     * @author Cay Horstmann

     */

    public class PairTest1

    {

       public static void main(String[] args)

       {

          String[] words = { "Mary", "had", "a", "little", "lamb" };

          Pair<String> mm = ArrayAlg.minmax(words);

          System.out.println("min = " + mm.getFirst());

          System.out.println("max = " + mm.getSecond());

       }

    }

       class ArrayAlg

    //泛型类

    {

       /**

        * Gets the minimum and maximum of an array of strings.

        * @param a an array of strings

        * @return a pair with the min and max value, or null if a is null or empty

        */

       public static Pair<String> minmax(String[] a)

    //用泛型Pair类

       {

          if (a == null || a.length == 0) return null;

          String min = a[0];

          String max = a[0];

          for (int i = 1; i < a.length; i++)

          {

             if (min.compareTo(a[i]) > 0) min = a[i];

             if (max.compareTo(a[i]) < 0) max = a[i];

          }

          return new Pair<>(min, max);

       }

    }

    package pair1;

    /** 

    * @version 1.00 2004-05-10

     * @author Cay Horstmann 

    */public class Pair<T>

    //Pair类引入了一个类型变量T,用尖括号(<>)括起来,并放在类名的后面。

    {   

    private T first;   private T second;   

     public Pair() { first = null; second = null;

    }  

     public Pair(T first, T second) {

    this.first = first;  this.second = second;

    }    

    public T getFirst() { return first;

    }   

    public T getSecond() { return second;

    }    

    public void setFirst(T newValue) { first = newValue;

    }   

    public void setSecond(T newValue) { second = newValue;

    }

    }

     

    测试程序2

    编辑、调试运行教材315 PairTest2,结合程序运行结果理解程序;

    在泛型程序设计代码处添加相关注释;

    泛型方法、泛型变量限定的定义及用途。

    package pair2;

    import java.time.*;

    /** * @version 1.02 2015-06-21

     * @author Cay Horstmann

     */public class PairTest2{   

    public static void main(String[] args)   {   

       LocalDate[] birthdays =          {           

      LocalDate.of(1906, 12, 9),

    // G. Hopper           

     LocalDate.of(1815, 12, 10),

    // A. Lovelace           

     LocalDate.of(1903, 12, 3),

    // J. von Neumann           

     LocalDate.of(1910, 6, 22), // K. Zuse         };      

    Pair<LocalDate> mm = ArrayAlg.minmax(birthdays);     

     //Pair中定义一个LocalDate类的birthdays数组     

     System.out.println("min = " + mm.getFirst());     

     System.out.println("max = " + mm.getSecond());  

     }

    }

    class ArrayAlg//泛型类ArrayAlg{  

     /**      Gets the minimum and maximum of an array of objects of type T.     

     @param a an array of objects of type T      

    @return a pair with the min and max value, or null if a is       null or empty  

     */   public static <T extends Comparable> Pair<T> minmax(T[] a)   

     //使用extends关键字,定义泛型变量的上界,调用Comparable接口   {    

      if (a == null || a.length == 0) return null;      T min = a[0];      

    T max = a[0];      for (int i = 1; i < a.length; i++)      {      

       if (min.compareTo(a[i]) > 0) min = a[i];      

       if (max.compareTo(a[i]) < 0) max = a[i];    

      }      

    return new Pair<>(min, max);  

     }

    }

    package pair2;

    /**

     * @version 1.00 2004-05-10

     * @author Cay Horstmann

     */

    public class Pair<T>

    {

       private T first;

       private T second;

       public Pair() { first = null; second = null; }

       public Pair(T first, T second) { this.first = first;  this.second = second; }

       public T getFirst() { return first; }

       public T getSecond() { return second; }

       public void setFirst(T newValue) { first = newValue; }

       public void setSecond(T newValue) { second = newValue; }

    }

     

    测试程序3

    用调试运行教材335 PairTest3,结合程序运行结果理解程序;

    了解通配符类型的定义及用途。

    package pair3;

    /** 

    * @version 1.01 2012-01-26 

    * @author Cay Horstmann

     */public class

    PairTest3{   

    public static void main(String[] args)   {     

     Manager ceo = new Manager("Gus Greedy", 800000, 2003, 12, 15);      

    Manager cfo = new Manager("Sid Sneaky", 600000, 2003, 12, 15);      

    Pair<Manager> buddies = new Pair<>(ceo, cfo);          

      printBuddies(buddies);     

      ceo.setBonus(1000000);    

      cfo.setBonus(500000);      

    Manager[] managers = { ceo, cfo };      

     Pair<Employee> result = new Pair<>();     

     minmaxBonus(managers, result);      

    System.out.println("first: " + result.getFirst().getName()         

     + ", second: " + result.getSecond().getName());      

    maxminBonus(managers, result);      

    System.out.println("first: " + result.getFirst().getName()          

    + ", second: " + result.getSecond().getName());  

     }   

     public static void printBuddies(Pair<? extends Employee> p)   {     

     Employee first = p.getFirst();     

     Employee second = p.getSecond();     

     System.out.println(first.getName() + " and " + second.getName() + " are buddies.");  

     }   

     public static void minmaxBonus(Manager[] a, Pair<? super Manager> result)   {     

     if (a.length == 0) return;      

    Manager min = a[0];     

     Manager max = a[0];    

      for (int i = 1; i < a.length; i++)      {     

        if (min.getBonus() > a[i].getBonus()) min = a[i];         

    if (max.getBonus() < a[i].getBonus()) max = a[i];    

      }      

    result.setFirst(min);     

     result.setSecond(max);  

     }    

    public static void maxminBonus(Manager[] a, Pair<? super Manager> result)   {     

     minmaxBonus(a, result);     

     PairAlg.swapHelper(result);

    // OK--swapHelper captures wildcard type  

     }  

     // Can't write public static <T super manager> ...}class PairAlg{  

     public static boolean hasNulls(Pair<?> p)   {    

      return p.getFirst() == null || p.getSecond() == null;  

     }   

     public static void swap(Pair<?> p) { swapHelper(p);

    }  

      public static <T> void swapHelper(Pair<T> p)   {    

      T t = p.getFirst();     

     p.setFirst(p.getSecond());    

      p.setSecond(t);  

     }

    }

    package pair3;

    /** * @version 1.00 2004-05-10 

    * @author Cay Horstmann

     */public class Pair<T> {   

    private T first;  

     private T second;    

    public Pair() { first = null; second = null;

    }   

    public Pair(T first, T second) {

    this.first = first;  this.second = second;

    }    

    public T getFirst() { return first;

    }  

     public T getSecond() { return second;

    }    

    public void setFirst(T newValue) {

    first = newValue;

    }  

     public void setSecond(T newValue) {

    second = newValue;

    }

    }

    package pair3;

    import java.time.*;

    public class Employee{     

    private String name;   

    private double salary;   

    private LocalDate hireDay;   

     public Employee(String name, double salary, int year, int month, int day)   {   

       this.name = name;     

     this.salary = salary;    

      hireDay = LocalDate.of(year, month, day);   

    }   

     public String getName()   {      

    return name;   

    }    

    public double getSalary()   {      

      return salary;  

     }   

     public LocalDate getHireDay()   {        

    return hireDay;  

     }    

    public void raiseSalary(double byPercent)   {       

     double raise = salary * byPercent / 100;      salary += raise;  

     }

    }

    package pair3;

    public class Manager extends Employee{    

     private double bonus;  

      /**      @param name the employee's name     

     @param salary the salary      

    @param year the hire year    

      @param month the hire month    

      @param day the hire day  

     */   public Manager(String name, double salary, int year, int month, int day)   {     

       super(name, salary, year, month, day);      bonus = 0; 

      }    

    public double getSalary()   {      

     double baseSalary = super.getSalary();     

     return baseSalary + bonus;   

    }    public void setBonus(double b)   {        

    bonus = b;   

    }   

     public double getBonus()   {     

       return bonus;  

     }

    }

     

    实验2编程练习:

    编程练习1:实验九编程题总结

    实验九编程练习1总结(从程序总体结构说明、模块说明,目前程序设计存在的困难与问题三个方面阐述)。

    实验九编程练习2总结(从程序总体结构说明、模块说明,目前程序设计存在的困难与问题三个方面阐述)。

    编程练习2:采用泛型程序设计技术改进实验九编程练习2,使之可处理实数四则运算,其他要求不变。

    package XOI;
    import java.util.Random;
    import java.util.Scanner;

    import java.io.FileNotFoundException;

    import java.io.PrintWriter;

    public class Main{
        public static void main(String[] args)
        {
            
            yunsuan counter=new yunsuan();//与其它类建立联系
        PrintWriter out=null;
        try {
            out=new PrintWriter("D:/text.txt");//将文件里的内容读入到D盘名叫text
             
        }catch(FileNotFoundException e) {
            System.out.println("文件找不到");
            e.printStackTrace();
        }
        
        
        int sum=0;

        for(int i=0;i<10;i++)
        {
        int a=new Random().nextInt(100);
        int b=new Random().nextInt(100);
        Scanner in=new Scanner(System.in);
        //in.close();
        
        switch((int)(Math.random()*4))
        
        {
        
        case 0:
            System.out.println( ""+a+"+"+b+"=");
            
            int c1 = in.nextInt();
            out.println(a+"+"+b+"="+c1);
            if (c1 == counter.plus(a, b)) {
                sum += 10;
                System.out.println("答案正确");
            }
            else {
                System.out.println("答案错误");
            }
            
            break ;
        case 1:
            if(a<b)
                            {
                                     int temp=a;
                                     a=b;
                                     b=temp;
                                 }//为避免减数比被减数大的情况

             System.out.println(""+a+"-"+b+"=");
             /*while((a-b)<0)
             {  
                 b = (int) Math.round(Math.random() * 100);
                 
             }*/
            int c2 = in.nextInt();
            
            out.println(a+"-"+b+"="+c2);
            if (c2 == counter.minus(a, b)) {
                sum += 10;
                System.out.println("答案正确");
            }
            else {
                System.out.println("答案错误");
            }
             
            break ;
        
          

        
        case 2:
            
             System.out.println(""+a+"*"+b+"=");
            int c = in.nextInt();
            out.println(a+"*"+b+"="+c);
            if (c == counter.multiply(a, b)) {
                sum += 10;
                System.out.println("答案正确");
            }
            else {
                System.out.println("答案错误");
            }
            break;
        case 3:
            
            
             
            while(b==0)
            {  b = (int) Math.round(Math.random() * 100);//满足分母不为0
            }
            while(a%b!=0)
            {
                  a = (int) Math.round(Math.random() * 100);
                  b = (int) Math.round(Math.random() * 100);
            }
            System.out.println(""+a+"/"+b+"=");
         int c0= in.nextInt();
        
         out.println(a+"/"+b+"="+c0);
         if (c0 == counter.divide(a, b)) {
             sum += 10;
             System.out.println("答案正确");
         }
         else {
             System.out.println("答案错误");
         }
        
         break;
         

        }
        }
        System.out.println("totlescore:"+sum);
        out.println(sum);
        
        out.close();
        }
     }

    package XOI;
    public class yunsuan <T>{
        private T a;
        private T b;
        public void yunsaun()
        {
            a=null;
            b=null;
        }
        public void yunsuan(T a,T b)
        {
            this.a=a;
            this.b=b;
        }
       public int plus(int a,int b)
       {
           return a+b;
           
       }
       public int minus(int a,int b)
       {
        return a-b;
           
       }
       public int multiply(int a,int b)
       {
           return a*b;
       }
       public int divide(int a,int b)
       {
           if(b!=0  && a%b==0)
           return a/b;
           else
               return 0;
       }
       }

     

    实验总结:复习以前的实验内容,更好了解泛型概念。

  • 相关阅读:
    SVN服务器搭建(一)
    排序算法二:冒泡排序
    【LeetCode】136. Single Number
    【LeetCode】217. Contains Duplicate
    【LeetCode】189. Rotate Array
    【LeetCode】122. Best Time to Buy and Sell Stock II
    【LeetCode】26. Remove Duplicates from Sorted Array
    【LeetCode】20. Valid Parentheses
    【LeetCode】680. Valid Palindrome II
    【LeetCode】345. Reverse Vowels of a String
  • 原文地址:https://www.cnblogs.com/baimaciren/p/9904154.html
Copyright © 2020-2023  润新知