zoukankan      html  css  js  c++  java
  • 20190918Java课堂记录

    1. EnumTest.java

    public class EnumTest {
    
        public static void main(String[] args) {
            Size s=Size.SMALL;
            Size t=Size.LARGE;
            //s和t引用同一个对象?
            System.out.println(s==t);  //
            //是原始数据类型吗?
            System.out.println(s.getClass().isPrimitive());
            //从字符串中转换
            Size u=Size.valueOf("SMALL");
            System.out.println(s==u);  //true
            //列出它的所有值
            for(Size value:Size.values()){
                System.out.println(value);
            }
        }
    
    }
     enum Size{SMALL,MEDIUM,LARGE};

    s 和 t 的值不同,s == t 的结果为 false

    Size 不是基本类型,返回 false

    枚举类型值相等即为一个变量

    values() 为返回所有值

    总结:枚举enum是一种特殊的类(还是类),使用枚举可以很方便的定义常量

    一个常用的场合就是switch语句中,使用枚举来进行判断
    注:因为是常量,所以一般都是全大写

    使用枚举的好处就是可以把变量的范围限定在几个以内,在使用 switch 的时候就不用担心有其他值的情况

    2. TestDouble.java

    public class TestDouble {
    
        public static void main(String args[]) {
            System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));
            System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));
            System.out.println("4.015 * 100 = " + (4.015 * 100));
            System.out.println("123.3 / 100 = " + (123.3 / 100));
        }
    }

    运行结果:

    0.05 + 0.01 = 0.060000000000000005
    1.0 - 0.42 = 0.5800000000000001
    4.015 * 100 = 401.49999999999994
    123.3 / 100 = 1.2329999999999999

    结论:使用double类型的数值进行计算, 其结果是不精确的。

    解决方法——使用BigDecimal类

    import java.math.BigDecimal;
    
    public class TestBigDecimal
    {
        public static void main(String[] args) 
        {
            BigDecimal f1 = new BigDecimal("0.05");
            BigDecimal f2 = BigDecimal.valueOf(0.01);
            BigDecimal f3 = new BigDecimal(0.05);
            System.out.println("下面使用String作为BigDecimal构造器参数的计算结果:");
            System.out.println("0.05 + 0.01 = " + f1.add(f2));
            System.out.println("0.05 - 0.01 = " + f1.subtract(f2));
            System.out.println("0.05 * 0.01 = " + f1.multiply(f2));
            System.out.println("0.05 / 0.01 = " + f1.divide(f2));
            System.out.println("下面使用double作为BigDecimal构造器参数的计算结果:");
            System.out.println("0.05 + 0.01 = " + f3.add(f2));
            System.out.println("0.05 - 0.01 = " + f3.subtract(f2));
            System.out.println("0.05 * 0.01 = " + f3.multiply(f2));
            System.out.println("0.05 / 0.01 = " + f3.divide(f2));
        }
    }
    TestBigDecimal

    运行结果:

    下面使用String作为BigDecimal构造器参数的计算结果:
    0.05 + 0.01 = 0.06
    0.05 - 0.01 = 0.04
    0.05 * 0.01 = 0.0005
    0.05 / 0.01 = 5
    下面使用double作为BigDecimal构造器参数的计算结果:
    0.05 + 0.01 = 0.06000000000000000277555756156289135105907917022705078125
    0.05 - 0.01 = 0.04000000000000000277555756156289135105907917022705078125
    0.05 * 0.01 = 0.0005000000000000000277555756156289135105907917022705078125
    0.05 / 0.01 = 5.000000000000000277555756156289135105907917022705078125

    3. 

            int X=100;
            int Y=200;
            System.out.println("X+Y="+X+Y);
            System.out.println(X+Y+"=X+Y");
        

    使用运算符 + 连接字面量“The sum is” 和计算结果 sum将String 和其它数据类型相加,结果是一个新的String

    4. 

    自动生成 n 道小学四则运算题目的 “软件”

    //信1805-2孙超凡20183558
    import java.util.Scanner;
    
    public class Mathtest{
             public static void main(String[] args)
             {    
                 int[] chucun1= new int [1001]; 
                 int[] chucun2= new int [1001]; 
                 int[] chucun3= new int [1001]; 
                 int[] chucun4= new int [1001]; 
                 int[] chucun5= new int [1001]; 
                 int[] chucun6= new int [1001]; 
                 int[] chucun7= new int [1001]; 
                 int[] chucun8= new int [1001]; 
                 int max=100,min=1;
                 int ran1 = (int) (Math.random()*(max-min)+min); 
                 int ran2=(int) (Math.random()*(max-min)+min);
                 int zhuangtai=0;
                 char fuhao[]={'+','+','-','*','/'};
                 max=4;min=1;
                 int ran3=(int) (Math.random()*(max-min)+min);
                 int shuliang;
                 System.out.println("enter the number1:");
                 Scanner scan=new Scanner(System.in);
                 shuliang=scan.nextInt();
                 System.out.println("enter the number2:");
                 int hang=scan.nextInt();
                 int p=0;
                 for(int i=1;i<shuliang+1;++i)
                 {
                     ++p;
                     max=100;min=1;
                     ran1 = (int) (Math.random()*(max-min)+min); 
                     ran2=(int) (Math.random()*(max-min)+min);
                     max=5;min=1;
                     ran3=(int) (Math.random()*(max-min)+min);
                     
                     
                     
                     switch(ran3){
                     case 1:{max=100;min=1;
                     chucun5[i]=ran1;
                     chucun6[i]=ran2;
                     for(int m=0;m<i;++m){
                         if(ran1==chucun5[m]||ran2==chucun6[m]){
                             zhuangtai=1;
                             break;}
                     zhuangtai=0;
                     }
                     
                     while(zhuangtai==1){
                         ran1 = (int) (Math.random()*(max-min)+min); 
                         ran2=(int) (Math.random()*(max-min)+min);
                         chucun5[i]=ran1;
                         chucun6[i]=ran2;
                         for(int m=0;m<i;++m){
                             if(ran1==chucun5[m]||ran2==chucun6[m]){
    
                                 zhuangtai=1;
                                 break;}
                         zhuangtai=0;}
                         }
                     System.out.println(i+","+ran1+" + "+ran2+" =");
            break;
                 }
                     case 2:{
                         max=100;min=1;
                         chucun1[i]=ran1;
                         chucun2[i]=ran2;
                         for(int m=0;m<i;++m){
                             if(ran1==chucun1[m]||ran2==chucun2[m]){
                                 zhuangtai=1;
                                 break;}
                         zhuangtai=0;
                         }
                         while(zhuangtai==1){
                             ran1 = (int) (Math.random()*(max-min)+min); 
                             ran2=(int) (Math.random()*(max-min)+min);
                             chucun1[i]=ran1;
                             chucun2[i]=ran2;
                             for(int m=0;m<i;++m){
                                 if(ran1==chucun1[m]||ran2==chucun2[m]){
                                     zhuangtai=1;
                                     break;}
                             zhuangtai=0;}
                             }
                         if(ran1>ran2)System.out.println(i+","+ran1+" - "+ran2+" =");
                         else System.out.println(i+","+ran2+" - "+ran1+" =");
                         break;
                     }
                     case 3:
                     {
                         max=100;min=1;
                         ran1 = (int) (Math.random()*(max-min)+min); 
                         ran2=(int) (Math.random()*(max-min)+min);
                         chucun3[i]=ran1;
                         chucun4[i]=ran2;
                         
                         while((ran1*ran2)>=100){
                             ran1 = (int) (Math.random()*(max-min)+min); 
                             ran2=(int) (Math.random()*(max-min)+min);
                             chucun3[i]=ran1;
                             chucun4[i]=ran2;
                             
                         }
                         for(int m=0;m<i;++m){
                             if(ran1==chucun3[m]||ran2==chucun4[m]){
                                 zhuangtai=1;
                                 break;}
                         zhuangtai=0;
                         }
                         while(zhuangtai==1&&(ran1*ran2)>=100){
                             ran1 = (int) (Math.random()*(max-min)+min); 
                             ran2=(int) (Math.random()*(max-min)+min);
                             chucun3[i]=ran1;
                             chucun4[i]=ran2;
                             for(int m=0;m<i;++m){
                                 if(ran1==chucun3[m]||ran2==chucun4[m]){
                                     zhuangtai=1;
                                     break;}
                                 
                             zhuangtai=0;}
                             
                             
                             }
                         System.out.println(i+","+ran1+" * "+ran2+" =");
                         max=100;min=1;
                         ran1 = (int) (Math.random()*(max-min)+min); 
                         ran2=(int) (Math.random()*(max-min)+min);
                         break;
                     }
                     case 4:{
                         max=100;
                         if(ran1>ran2){
                         float ran=ran1/ran2;
                         while(ran1%ran2!=0){
                             ran1 = (int) (Math.random()*(max-min)+min); 
                             ran2=(int) (Math.random()*(max-min)+min);
                             
                         }
                        
                         
                         chucun7[i]=ran1;
                         chucun8[i]=ran2;
                         for(int m=0;m<i;++m){
                             if(ran1==chucun7[m]||ran2==chucun8[m]){
                                 zhuangtai=1;
                                 break;
                                 }
                         zhuangtai=0;
                         }
                         
                         while(zhuangtai==1){
                             ran1 = (int) (Math.random()*(max-min)+min); 
                             ran2= (int) (Math.random()*(max-min)+min);
                             ran=ran1/ran2;
                             while(ran1%ran2!=0){
                                 ran1 = (int) (Math.random()*(max-min)+min); 
                                 ran2=(int) (Math.random()*(max-min)+min);
                                 
                             }
                             
                             chucun7[i]=ran1;
                             chucun8[i]=ran2;
                             for(int m=0;m<i;++m){
                                 if(ran1==chucun7[m]||ran2==chucun8[m]){
                                     zhuangtai=1;
                                     break;}
                             zhuangtai=0;}
    //                         System.out.println(zhuangtai+"!!");
                             }
                         
                         System.out.println(i+","+ran1+" / "+ran2+" =");
                         
                         break;
                         }
                         else {
                             int t=ran2;
                             ran2=ran1;
                             ran1=t;
                             float ran=ran1/ran2;
                             while(ran1%ran2!=0){
                                 ran1 = (int) (Math.random()*(max-min)+min); 
                                 ran2=(int) (Math.random()*(max-min)+min);
                                 
                             }
                             chucun7[i]=ran1;
                             chucun8[i]=ran2;
                             for(int m=0;m<i;++m){
                                 if(ran1==chucun7[m]||ran2==chucun8[m]){
                                     zhuangtai=1;
                                     break;}
                             zhuangtai=0;
                             }
                             
                             while(zhuangtai==1){
                                 ran1 = (int) (Math.random()*(max-min)+min); 
                                 ran2=(int) (Math.random()*(max-min)+min);
                                ran=ran1/ran2;
                                 while(ran1%ran2!=0){
                                     ran1 = (int) (Math.random()*(max-min)+min); 
                                     ran2=(int) (Math.random()*(max-min)+min);
                                     
                                 }
                                 chucun7[i]=ran1;
                                 chucun8[i]=ran2;
                                 for(int m=0;m<i;++m){
                                     if(ran1==chucun7[m]||ran2==chucun8[m]){
                                        
                                         zhuangtai=1;
                                         break;
                                         }
                                 zhuangtai=0;
                                 }
    //                             System.out.println(zhuangtai+"??");
                                 }
                             
                             
                             System.out.println(i+","+ran1+" / "+ran2+" =");
                             
                             break;
                             
                         }
                     }
                     }
                     if(p==hang){
                         System.out.println("\n");
                         p=0;
                     }
                     
                     
                
                 }
            }
        
    }//定制,不能重复
    Mathtest

    运行结果

     实现功能:

    自定义题目总数和组数

    算式不重复

    乘法结果 < 100

    除法均为整除

     5.  计算机储存数据最终都是转换成二进制数字进行储存,而计算机进行简单的运算时,也是通过二进制下的数字进行计算的。

    比如4Bytes的int类型变量储存了十进制的11,那么在内存中它的存在形式是00000000 00000000 00000000 00001011,那么如果它储存的是

    十进制的-11,那么它的存在形式是10000000 00000000 00000000 00001011,这个数就叫二进制原码。对于一个正数,其二进制反码和原码

    相同;对于一个负数,其二进制反码即其二进制原码除了符号位各位取反后的结果。补码的定义和反码很像,对于一个正数,它的二进制补

    码是它的二进制原码;对于一个负数,它的二进制补码是它的二进制反码再加上1。

    如图所示,Java是用采用补码表示的

  • 相关阅读:
    完爆!用边缘容器,竟能秒级实现团队七八人一周的工作量
    手把手教你使用 cert-manager 签发免费证书
    手把手教你使用 Nginx Ingress 实现金丝雀发布
    Codeforces 534B Covered Path 贪心
    Codeforces 534A Exam 水
    Topcoder open 2015 Round 1A 250 Similars 枚举 + 状压
    Topcoder SRM 654 DIV1 500 FoldingPaper2 递归 + 枚举
    Topcoder SRM655 DIV2 250 BichromeBoard 水
    2015 Google code jam Qualification Round B 枚举 + 贪心
    2015 Google code jam Qualification Round A 水
  • 原文地址:https://www.cnblogs.com/deepend/p/11539696.html
Copyright © 2011-2022 走看看