Day8知识总结

数据类型转换

char<byte<short<int<long<float<double
boolean类型不参与数据类型转换以及比较,只有两个值true与false

强制数据类型转换:可能会溢出,也可能损失精度

   //强制转换 大转小
   long data1=100000000000L;
   int data2=(int) data1; //溢出
   double pi=3.1415926535897932384;
   float f=(float)pi;//损失精度

隐式转换 小类型自动转大类型

 //隐式转换
short a3=a1;
int a4=a1;
long a5=a1;
double a6=a1;

强制转换 大类型手动转小类型

大类型不能直接赋值给小类型,使用强制转换语法规则,进行数据类型转换
char 键盘上某个字符值:0-127 char无符号(无负数)

byte a1=10;//10是直接量(字面量),可判断赋值是正确
int k=3;
// byte a2=k;
//k是变量,且k为int类型,不能直接复制给byte

int a7=-100000;
char a8=(char)a7;//强转
a7=a8; //隐士 自动转换

//char 键盘上某个字符值:0-127  char无符号(无负数)

运算结果由参与运算大的数据类型决定

数据(char,byte,short)运算之后,结果转换为int,运算后数据结果数据类型最小为int

byte b1=5;
byte b2=5;
//byte b3=b1+b2;   //编译错误
// 数据(char,byte,short)运算之后,结果转换为int
//数据计算,数据结果数据类型最小位int
//修改方式
byte b3=(byte) (b1+b2);//强制转换
int b4=b1+b2;//把结果赋值给能存放的数据类型中 

// 数据运算的结果,以范围大的为准
long c1=4+1L;//int直接量+long直接量=long数据类型
long c2=2L; double c3=3.0;
double c4=c2+c3 //long类型+double类型=double数据类型

算数运算符

+、-、*、/[整数运算取整] 、%[取余]、{+、-可当正数、负数} 、(加加)++、(减减)–

前后自增对变量本身来说都要加一;对于赋值运算种,会影响赋值的结果
(++n2)前自增: ++在变量前面,变量值先自增,再把自增后的变量值赋给n2
(n2++) 后自增:++在变量后面,先把n2的值赋出,n2再自增

//++ n++ ++n n变量本身会自增1
int n=5;
int n2=n++;
//后自增:++在变量后面,先把n的值赋给n2,n再自增
//前自增: ++在变量前面,变量值先自增,再把自增后的变量值赋给n2
System.out.println(n++);//等价int n2=n++

//前自减、后自减
int k2=5;
System.out.println(k2--); //输出k2,k2-1=4
System.out.println(--k2);//输出k2-1=3 k2=3
System.out.println(k2);//3

int b0=5;
int b1=b0-- + ++b0;//5+5(4+1)=10 b0=5
System.out.println(b1); //10
System.out.println(b0);//5

int b2=5;
int b3=--k2 + k2--; //4(5-1)+ 4(赋值k2当前值)=8 k2=4-1=3;

关系运算符

关系运算 > 、< 、>= 、<= 、!= 、== 、
关系运算结果为boolean类型

基本数据类型 可以直接使用关系运算;
引用类型不能直接使用关系运算
基本数据类型 变量中存储的是值
引用类型 变量中存储的是引用地址 无法比较

判断两个数组的元素是否一一对应

 public static void isSameNum(int arr1[],int arr2[]){
        Boolean v=true;
        if(arr1.length==arr2.length){ 
         //确保两个数组长度相等
            for(int i=0;i<arr1.length;i++){  
            //取出同一下表的数组元素
                if(arr1[i]!=arr2[i]) {
                //int数据类型比较 即基本数据类型比较
                    v=false;   //值不一样则结束循环
                    break;
                }
            }
        }
        else
            v=false;
        if(v)  //判断循环条件
            System.out.println("两个数组一一对应");
        else
            System.out.println("两个数组不是一一对应");
    }

产生10个100以内的随机整数,开平方(开根号)后小于等于6,就给该数加上一个100以内的随机整数

取整
四舍五入:Math.round()
向上取整:Math.ceil()
向下取整:Math.floor()

public static void randNum(int n2){
        double []n=new double[n2];
        for(int i=1;i<=n2;i++)
            n[i-1]=Math.ceil(Math.random()*100);
            //产生一个0-1的小数*100,向上取整
        System.out.println("原数组:"+ Arrays.toString(n));
        for(int i=0;i<n.length;i++){
            if(Math.sqrt(n[i])<=6){   //产生的整数开根号
                n[i]=n[i]+Math.ceil(Math.random()*100); 
                //再产生一个向上取整的数相加
            }
        }
        System.out.println("修改后数组:"+ Arrays.toString(n));
        //排序后
        Arrays.sort(n);
        System.out.println("排序后:"+Arrays.toString(n));
    }

逻辑运算符

逻辑运算 与[&& 短路与 、 & 逻辑与]、或[|| 短路或 、 | 逻辑或]、非[!]

短路逻辑:如果逻辑算由第一个表达式已得到了,就不计较第二个表达式
不短路逻辑:参与逻辑运算表达式都需要计算出结果,使用较少

int a=3,b=5;
boolean b1=a>b && a++>0; 
//a>b==false 在&&短路 第一个表达式决定了逻辑运算结果,为假
//即a=3[不执行a++]
boolean b2=a>b & a++>0; 
//a>b==false 在&逻辑 第一个表达式为假
//第二个表达式也要执行即a=4[执行a++]
boolean b3=a<b || a++>0; 
//a<b==true 在||短路 第一个表达式决定了逻辑运算结果,为真
//即a=3[不执行a++]
boolean b4=a<b | a++>0;
//a<b==true 在|l逻辑 第一个表达式为为真
//第二个表达式也要执行即a=4[执行a++]

赋值运算符

赋值运算 =

扩展运算符

+= 、 -= 、 /= 、 %= [中间未有空格]
当使用变量自己和某个数进行运算时,可使用扩展运算符,简化表达式

int sum=0;
int a,b,c;
c=100;
a=b=c;
sum+=a;
sum+=b;
sum=a+b;//这个无法使用扩展运算符

sum +=10 与 sum=sum+10 只是相似并不相等

byte b1=8;
b1+=3; //等价与 b1=(byte)(b1+3)
//b1=b1+5; 由于5是int数据类型,5+s是一个int类型的数据
//若赋值给byte类型存在类型不匹配

“+” 字符串拼接

运算符"+" ,用于整型、浮点型数据类型[数值型],加法运算
运算符"+",用于字符串型,字符串拼接运算

String s=1+2+3+"";//"6"
String s1=""+1+2+3;//"123"
String s2=""+(1+2+3);//"6"
String s3="ab"+100;//"ab100"

三目运算符 X?Y:Z;

等价boolean表达式?表达式1[true满足]:表达式2[false不满足]
运算结果由参与运算大的数据类型决定

//数据比大小
int a2=5,b2=10;
int max=a2>b2?a2:b2;
System.out.println(max);
//int c2=a2>3?3:3.3; //运算结果由参与运算大的数据类型决定
double c2=a2>3?3:3.3;

五只猴子分桃

海滩上有一堆桃子,五只猴子来分
第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份
第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中拿走了一份
第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子

方法一

先找到第一个猴子有多少,再根据条件x=x-(x-1)/5-1进行运算5次,若循环每次都能算的清,则是最少桃子数

//方法一:
public static void peachCount1(int n){
        int peach=6;
        while (true){
            int x=peach;
            boolean v=true;
            for(int i=1;i<=n;i++){
                if((x-1)%5==0){
                    x=x-(x-1)/5-1;
                }
                else {
                    v=false;
                    break;
                }
            }
            if (v)
                break;
            peach++;
        }
        System.out.println("桃子至少为:"+peach);
    }

方法二

最后剩余桃子数最小为4,从而递增;每一次递增均需满足(peach+1)*5-1)%4条件,否则从新选择最后桃子剩余数

public static void peachCount2(int n){
        int i=4;
        while (true){
            int peach=i;
            boolean v=true;
            for (int j=1;j<=n;j++){
                if(((peach+1)*5-1)%4==0){  //判断条件
                    peach=((peach+1)*5-1)/4;
                }
                else {
                    v=false;
                    break;
                }
            }
            if(v){
                System.out.println("桃子至少有:"+peach);
                break;
            }
            i++;
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值