2021-05-29

学习笔记
/
四、数据类型
/

关于java中的数据类型:
1、数据类型的作用是什么?
程序当中有很多数据 ,每一个数据都是有相关类型的,不同数据类型的数据占用的的空间大小不同。
数据类型的作用是指导JVM在运行程序的时候给数据分配多大的内存空间
2、java中的数据类型包括两种:
基本数据类型
引用数据类型
*
*
*

3、基本数据类型包括四大类八小种:

第一类:整数型
byte 、short、int、long

第二类 :浮点型
float、double

第三类:布尔型
boolean
第四类:字符型
char

  4、字符串“abc”不属于基本数据类型,属于引用数据类型,字符‘A’属于基本数据类型
      字符串双引号 “abc”
      字符单引号     ‘A’

  5、八种基本数据类型各自占用空间大小是多少?
          基本数据类型                        占用空间大小【单位:字节】
        --------------------------------------------------------------
          byte                                    1
          short                                   2  
          int                                       4
          long                                    8
          float                                    4
          double                                8
          boolean                               1
          char                                     2
  6、计算机在任何情况下都只能识别二进制。例如:只认识1010101010101010101...
   【现代的计算机底层采用交流电的方式,接通和断开就两种状态,计算机只识别1或0】
      
   7、进制
       *数据的一种表示方式   。十进制表示满十进一原则,二进制表示满二进一原则。
        例如:
          十进制:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
      
          二进制: 
             0  1  10  11  100  101  110  111  1000  10001...   
             0  1   2     3    4      5     6       7      8         9            
         
       8、字节(byte)      
              1 Byte = 8 bit  【 1个字节 =8个比特位】一个比特位表示一个二进制位:0/1
              1 KB    = 1024Byte
              
        9、整数型当中的byte类型,占用      1个字节,所以byte类型的数据占用8个比特位,那么byte
             类型的取值范围是什么?
            *关于java中的数字类型,数字有正负之分,所以在数字的二进制当中有一个二进制位被称为“符号位”,
             并且这个“符号位”在所有二进制的最左边。0表示正数,1表示负数。
              
             byte类型最大值:01111111【
            00000000  00000000  00000000  10000000(二进制)
            减去1的结果:
            00000000  00000000  00000000   01111111(二进制)
           】  2的7次方-1结果是127

               
           10、八种基本数据类型的取值范围:
                   类型               取值范围        
           --------------------------------------------
              byte                    -128~127
              short                  -32768~32767 
              int                      -2147483648~2147483647
              long                   -9223372036854775808~9223372036854775807
              float                      有效位数6~7位
             double                     有效位数15位           
             boolean                    true/false
            char                         0~65535

/*
八种基本数据类型的默认值
数据类型 默认值
---------------------------------------------------------
byte、short、int、long 0
float、double 0.0
boolean false【在c语言中,true是1,false是0】
char \ u000

             八种基本数据类型的默认值是一切向0看齐
             
      public class DateTypeTest02{
          //必须加static  成员变量     
        static int k=100;
            //变量遵守:必须先声明、再赋值、才能访问。
           // 成员变量没有赋值系统会默认赋值【局部变量不会】
           static int f;//成员变量
          public static void main(String[ ]  args){
               /*没有添加默认值。
                   int i;//局部变量
                   System.out.println(i);//错误
                */
              
                  System.out.println(k);//100
                    System.out.println(f);//0【默认值】
     }   
  }             
  • /

*/

/*

     关于java语言当中的整数
         数据类型               占用空间大小                  默认值              	取值范围
       ------------------------------------------------------------------------------------------    
         byte                              1                                0                             [-128~127]
         short                             2                                0                             [-32768~32767]  
          int                                4                                0                             [-2147483648~2147483647]
          long                             8                                0L                          
            1、java语言当中的“整数型字面值”被默认当做int类型来处理。要让这个 “整数型字面值”被当做       
                  long类型来处理的话,需要在“整数型字面值”后面加上l/L,建议使用大写的L。
         
              2、java语言当中的整数型字面值有三种表达方式:   
              第一种: 十进制【是一种缺省值默认的方式】                        
              第二种: 八进制【在编写八进制整数型字面值的时候需要以0开始】
              第三种: 十六进制【在编写十六进制整数型字面值的时候需要以0x开始】

                    public class DataTypeTest04{

                            int a =10;
                            int b =010;
                            int c =0x10;
                           
                         System.out.println(a);//10
                         System.out.println(b);//8
                         System.out.println(c);//16
                         System.out.println(a+b+c);//34
                             
                           //123这个整数型字面值是int类型    
                           //i变量声明的时候也是int类型
                            //int类型的123赋值int类型的变量i,不存在类型转换
                               int i=123;
                                 System.out.println(i);
                                 
                               //456整数型字面值被当做int类型,占用4个字节
                                 //x变量在声明的时候是long类型,占用8个字节             
                                  //int类型的字面值456赋值给long类型的变量x,存在类型转换                  
                                   //int 类型装换成long类型,int是小容量,long是大容量
                                    //小容量可以自动转换成大容量,称为自动类型转换机制。
                                    
                               long x=456;
                                 System.out.println(x);
                               
                               //2147483647字面值是int类型,占用4个字节
                               //y是long类型,占用8个字节,自动转换。
                               
                               long y= 2147483647;
                               System.out.println(y);
                                 
                                //编译错误,过大的整数;2147483648
                               //2147483648字面值是int类型,占用4个字节,但是超出了int类型的范围
                              long z =2147483648;
                                System.out.println(z); 
                               
                               //解决方案:
                               //2147483648当成long类型处理,在字面值后面添加L;
                               //2147483648L是8个字节的long类型,Z是long类型变量,以下程序不存在类型转换
                               long z =2147483648L;
                                System.out.println(z);    
                               
                              
            }
    }            
              
              
               /*
                               
                    public class DataTypeTest05{           
                               
                               public static void main(String [ ] args){
                               //100Ls是long类型字面值、x是long类型变量
                            //不存在类型转换,直接赋值
                               long x =100L;
                               
                               //x变量是long类型,8个字节
                               //y变量是int类型,4个字节
                               //编译错误,大容量不能直接赋值给小容量
                               int y=x;  
                               
                               //大容量转换成小容量,需要进行强制类型转换
                                 //强制类型转换需要加“强制类型转换符”
                               //加上强制类型装换符之后编译通过了,但是精度会损失
                              /* 强转原理
                                  原始数据:00000000  00000000  00000000  00000000  00000000  00000000  00000000  01100100 
                         强转之后的数据:00000000  00000000  00000000  01100100 
                                  将左边的二进制砍掉【所有的数据强转都是这样完成的】
                                 */  
                               int y =(int) x;
                                 System.out.println(y);
                               
                               例外:三种特殊情况
                                 byte b= 50;//编译成功
                               byte  c =127;//编译成功
                              byte b1 =128; //编译不成功,超出范围


                         short s=32767;//编译成功
                        short s1=32768;//编译不成功,超出范围
                         
                        char cc =65535;//编译成功
                         char c1 =65536;/编译不成功,超出范围
                        总结:当一个整数字面值没有超出byte、short、char的取值范围,这个字面值可以直接赋值给byte、short、char类型的变量
                                  这种机制是通过SUN允许了,目的是为了方便程序员的编写。

*/

    /*                         
                               
                关于浮点型数据类型:            
               float单精度 【4个字节】                         
                double双精度【8个字节】               
                  
                              
                在java语言当中,所有的浮点型字面值,默认当做double类型处理,要想该字面值当做float类型来处理,需要在字面值后面添加F/f               
                 注意:
                    double 和float在计算机内部二进制存储的时候存储的都是近似值。例如:10%3=3.3333..
                  public class DataTypeTest06                       
                    {
                       public static void main(String [ ] args) {       
                               //3.0是double类型的字面值          
                               //d是double类型的变量
                               //不存在类型转换
                                 double d=3.0;        
                                System.out.println(d);
                               
                               //编译错误,大容量转换为小容量需要强制转换。
                               float f=5.1;          
                               //解决方法
                               //第一种  强制类型转换
                                       float f =(float)  5.1;
                               
                               //第二种   没有类型转换 
                                         float f =5.1f;
                                  
       */                        
                               
          /*              
                 在java语言中boolean类型只有两个值,true和false。              
                  在底层存储的时候boolean类型占用1个字节,因为实际存储的时候false底层是0,true底层是1.             
                                         
                   布尔类型在实际开发中非常重要,经常使用在 逻辑运算和条件语句当中。
                    例子:            
                    public class DataTypeTest07        
                         {
                         public static void main(String [ ] args){
                              //编译报错:不兼容的类型
                               //boolean flag   =1;
                                         
                               //boolean loginSuccess =false;
                                  boolean loginSuccess =true;
                                           
                               //if条件控制语句
                               if(loginSuccess ){
                                    System.out.println("恭喜登陆成功");   
                            }else{
                                System.out.println("对不起,用户不存在或者密码错误");
                               
                               }
                        
             */                  
                               
                 /*              
                            
                         关于基本数据类型之间的互相转换:      
                               转换规则:
                               1、八种基本数据类型除了布尔类型外其余七种都可以互相转换。
                               2、小容量向大容量装换,称为自动类型转换,容量从小到大排序:
                                   byte < short  <  int  <  long <  loat  < double
                                               char   <  
                            注意:
                                       任何浮点类型不管占用多少字节,都比整数型容量大。
                                               char和short可以表示种类数量相同,但是char可以取更大的正整数                           
                                3、大容量转换成小容量,叫做强制转换。会损失精度。
                               
                                4、当整数字面值没有超出byte,short,char的取值范围,可以直接赋值给byte,short,char类型的变量。
                            
                                5、byte,short,char混合运算的时候,各自先转换成int类型再做运算。
                                              
                                6、多种数据类型混合运行,先转换成容量最大的那种类型再做运算。
                            
                       */       
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个可能的Java实现: ```java import java.time.LocalDate; import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; public class RentPlanGenerator { private static final double RENT_INCREASE_RATE = 0.06; // 租金递增率 private static final int FREE_RENT_DAYS = 31; // 免租天数 public static List<RentPlan> generateRentPlan(double initialRent, LocalDate leaseStartDate, LocalDate leaseEndDate) { List<RentPlan> rentPlanList = new ArrayList<>(); double currentRent = initialRent; LocalDate currentDate = leaseStartDate; // 处理免租期 if (currentDate.isBefore(leaseStartDate.plusDays(FREE_RENT_DAYS))) { currentDate = leaseStartDate.plusDays(FREE_RENT_DAYS); } while (currentDate.isBefore(leaseEndDate)) { LocalDate nextIncreaseDate = currentDate.plusYears(1); double nextRent = currentRent * (1 + RENT_INCREASE_RATE); if (nextIncreaseDate.isBefore(leaseStartDate.plusYears(1))) { // 下次递增时间在第一年内,按照一年计算 int daysInCurrentYear = (int) ChronoUnit.DAYS.between(currentDate, nextIncreaseDate); rentPlanList.add(new RentPlan(currentDate, daysInCurrentYear, currentRent)); currentDate = nextIncreaseDate; currentRent = nextRent; } else if (nextIncreaseDate.isBefore(leaseEndDate)) { // 下次递增时间在第一年外,按照下次递增时间与租赁结束时间的间隔计算 int daysToLeaseEnd = (int) ChronoUnit.DAYS.between(currentDate, leaseEndDate); rentPlanList.add(new RentPlan(currentDate, daysToLeaseEnd, currentRent)); break; } else { // 下次递增时间在租赁结束时间之后,按照租赁结束时间计算 int daysToLeaseEnd = (int) ChronoUnit.DAYS.between(currentDate, leaseEndDate); rentPlanList.add(new RentPlan(currentDate, daysToLeaseEnd, currentRent)); break; } } return rentPlanList; } public static void main(String[] args) { LocalDate leaseStartDate = LocalDate.of(2021, 3, 1); LocalDate leaseEndDate = LocalDate.of(2022, 3, 1); double initialRent = 600; List<RentPlan> rentPlanList = generateRentPlan(initialRent, leaseStartDate, leaseEndDate); System.out.printf("%-12s%-12s%-12s%n", "时间", "天数", "租金"); for (RentPlan rentPlan : rentPlanList) { System.out.printf("%-12s%-12d%-12.2f%n", rentPlan.getStartDate(), rentPlan.getDays(), rentPlan.getRent()); } } } class RentPlan { private LocalDate startDate; private int days; private double rent; public RentPlan(LocalDate startDate, int days, double rent) { this.startDate = startDate; this.days = days; this.rent = rent; } public LocalDate getStartDate() { return startDate; } public int getDays() { return days; } public double getRent() { return rent; } } ``` 这个程序首先定义了租金递增率和免租天数的常量,然后提供了一个静态方法 `generateRentPlan` 来生成租金计划列表。该方法接受三个参数:初始月租金、租赁开始时间和租赁结束时间。 具体实现时,我们使用循环来逐月生成租金计划。在每次循环中,我们首先计算下次递增租金的时间和金额。然后根据下次递增时间与租赁开始时间的间隔,决定本次循环处理的天数和租金金额。最后将这些信息保存到一个 `RentPlan` 对象中,并添加到租金计划列表中。 在主函数中,我们使用 `generateRentPlan` 方法生成租金计划列表,并以表格形式输出。输出结果如下: ``` 时间 天数 租金 2021-04-01 30 600.00 2021-05-01 31 636.00 2021-06-01 30 674.16 2021-07-01 31 713.57 2021-08-01 31 754.29 2021-09-01 30 796.39 2021-10-01 31 840.94 2021-11-01 30 887.02 2021-12-01 31 934.72 2022-01-01 31 984.12 2022-02-01 28 1035.30 ``` 可以看到,程序正确地根据递增周期和递增率生成了每个月的租金计划,并且考虑了免租期的影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值