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是用采用补码表示的

 

posted @ 2019-09-18 09:33  你的深渊  阅读(160)  评论(0编辑  收藏  举报