Java基础

一.常用运算符

1.1赋值运算符

+=  -+  *=  /=  %=这些是常用的赋值运算符,他们把等号后面的值或者变量赋值给等号前面的变量

如:  a+=b  相当于a = a + b
   -+:   如:  a-=b  相当于a = a - b
   *=:   如:  a*=b  相当于a = a * b
   /+:   如:  a/=b  相当于a = a / b
   %=:   如:  a%=b  相当于a = a % b
package com.basic.day03.symbol; //


public class AssignSymbol01 {
    public static void main(String[] args) {
       int a = 10;
       int b = 20;
       a+=b;  //  相当于a = a + b
       System.out.println(a); //30
        System.out.println(b);//20
        a-=b; //  相当于a = a - b
        System.out.println(a); //10

        int c = 3;
        int d = 6;
        c *= d;
        System.out.println(c); //18

        c = 15;
        c /= d; //注意:;两个整数做除法运算,取整操作
        System.out.println(c); //2

        int x = 15;
        int y = 6;
        x %= y;
        System.out.println(x); //3
    }
}

在上述代码中,我们可以很清楚的发现a+=b相当于a=a+b,  a-=b相当于a=a-b,所以第一次a的值是30,第二次的值是10,

第二组中c*=d相当于c=c*d,结果就是18      第三组除法也是相同的,c/+d相当于c=c/d,最后的结果是2(18/6之后保留整数部分)   第四组是x%=y,相当于x=x%y,最后的结果是3(取模运算看余数),最后的结果如下:

1.2 关系运算符

关系运算符包括:  >,  >= ,  < ,  <= ,  == ,   !=

他们的作用是用于判断两边的大小关系,最后的返回值的类型是:  boolean类型

我们通过一个案例可以更好的理解,对变量x和y分别赋值,根据关系运算符我们观察返回结果:

        

package com.basic.day03.symbol;

public class RelationSymbol {
    public static void main(String[] args) {
        int x = 10;
        int y = 20;
        System.out.println(x>y); //false
        System.out.println(x>=y); //false
        System.out.println(x<y); //true
        System.out.println(x<=y); //true
        System.out.println(x==y); //false
        System.out.println(x!=y); //true
    }
}

我们通过返回的结果可以看出来,如果判断语句是正确的,结果就是true,反之则是false,结果都是boolean类型。

1.3逻辑运算符

在Java语言中,我们常用的逻辑运算符有四种:

&与: 两真即为真,反之则是假

|或: 两假即为假,其中有任一为真则为真

!非:非真即假,非假即真

^异或:两个相同为假,两者不同为真

在Java语言中,我们更常用的是短路操作,

特点:第一个条件若是已经可以确定结果,则不需要执行第二个条件,节省时间

&&短路与: 一假全假,全真为真,

true&&true ==> true

true&&false ==> false 

false&&false ==> false

 false&&true ==> false 

 

对于短路与来讲,如果第一个是假,则不需要执行第二个条件,即可判断是假

||短路或:一真即为真,全假则假,

true||true ==> true

 true||false ==> true

false||false ==> false

false||true ==> true 

对于短路或来讲,如果第一个是true,则不需要执行第二个条件,即可判断是真

案例如下:

public class LogicSymbolDemo1 {
    public static void main(String[] args) {
       // 验证短路&&
         int a = 1, b = 2, c = 3, d = 4; //每个变量使用逗号隔开
        boolean f = a < b && c <d;
        System.out.println("f的值:"+f);//true
        f = a < b && c > d;
        System.out.println("f的值:"+f);  //false
        f = a >b && c++ < d;
        System.out.println("f的值:"+f);  //false
        System.out.println("c的值"+c); //如果c是3,表示第二个条件未执行
        f = a > b && c > d++;
        System.out.println("f的值:"+f); //false
        System.out.println("d的值"+d); //如果d是4,表示第二个条件未执行


        //验证短路或
        int m = 1, n = 2, x = 3, y = 4;
         f = m < n ||  x++<y;
        System.out.println("f的值:"+f);//true 
        System.out.println("x的值:"+x)// x的值为3,第一个条件是true,因此没进行自增运算
         f = m > n ||  x<y;
        System.out.println("f的值:"+f);  //true
        f = m < n ||  x>y++;
        System.out.println("f的值:"+f);  //true  y的值为4,第一个条件是true,因此没有进行自增运算,可以证明短路
        f = m > n ||  x>y++;
        System.out.println("f的值:"+f); //false
        System.out.println("y的值"+y); //

        //  !   非真即假,非假即真
        f = !(1>2);
        System.out.println("f的值:"+f);//true
        f = !f;
        System.out.println("f的值:"+f);//false
    }
}
运行结果如下:

我们通过第二组短路或||来判断,m<n已经成立,可以跳过第二个条件,我们设置了自增的条件来验证,发现结果成立,上一组也是同样的方法验证,需要注意的是,在我们验证的过程中,需要先设置第一个条件不成立,然后通过设置第二个条件变量的自增来判断结果

1.4三目运算符

三目运算的语法格式如下:

boolean类型的变量或者表达式  ?  值1  :  值2

当?前面的返回值是true时,选择第一个变量 值1;

当?前面的返回值时false时,选择第二个变量 值2;

需要注意:

1.该运算也遵循混合数据类型运算时转换成数值范围最大的类型

2.值1 和 值2可以是变量,也可以是表达式

3.值1 和 值2 的类型,需要能自动转换

4.通常三目运算的结果需要一个变量来接受,该变量的类型应该是值1 或 值2 其中的一个

我们通过一个小案例来理解一下三目运算符:

package com.basic.day03.symbol;


public class ThreeEyeSymbolDemo01 {
    public static void main(String[] args) {
        int a = 100;
        int b = 200;
       String str= a > b ? "是a大于b" : "a不大于b";
        System.out.println(str); //返回不大于

        int m = 10;
        long n = 15;
        long  result = n%m==1?n:m; //注意:需要考虑m与n在三目运算里,long类型的范围更大
        System.out.println("result的值:"+result);

    }
}

返回的结果如下:

由上述的返回结果和代码内容我们可以发现,第一组我们设置了字符类str a>b,结果是false,带入到三目运算中,我们可以发现应该选择值1,也就是:左边的值,a不大于b

第二组中定义了long类型的变量result去判断n%m==1,结果是false,还是选择值2,所以是n的值,10

二.两个常用的类

2.1 Scanner

Scanner类的使用方法主要分为四步:

1.第一步是导包:使用如下命令:

 import java.util.Scanner;(需要注意代码写在类的上面,package下面)

2.第二步是创建扫描器变量并用扫描器的变量引用该对象;使用如下命令:

 Scanner  sc(自己书写变量名) =  new Scanner(System.in);

3.第三步是调用类里提供好的方法,需要注意在调用前输出一个友好提示

System.out.println("请在控制台上输入一个年龄:");    
int age = sc.nextInt();

4.在操作结束,需要关闭选择器

sc.close()

下面我们可以看一个具体案例:

package com.basic.day03.scanner;
import java.util.Scanner;
public class ScannerDemo01 {
    public static void main(String[] args) {
       //步骤2:  创建对象并引用
       Scanner sc = new Scanner(System.in);
       //步骤3:   友好提示
       System.out.println("请输入几个单词,用空格隔开,这几个单词被扫描到一个变量里");
       // 调用类里提供的方法
        String words = sc.nextLine();//该方法可以扫描到空格,但是尽量不要和其他扫描功能一起使用,可能出现bug,不能输入,直接出错
        System.out.println("words:"+words);
        // 关闭操作器
        sc.close();
    }
}

运行结果如下:

通过上述的代码和运行结果我们可以发现,我们创建了Scanner类型的对象 sc ,并在之后输出了友好提示,在我们调用类的方法是,我们选择了sc.nextline(),使用这种方法可以扫描到空格,但是不要和其他的扫描方法在一起使用,可能会出现bug,我们继续看下一个案例:

package com.basic.day03.scanner;
import java.util.Scanner;
public class ScannerDemo01 {
    public static void main(String[] args) {
       //步骤2:  创建对象并引用
       Scanner sc = new Scanner(System.in);
        //步骤3:  扫描一个姓名
        System.out.println("请输入一个姓名:");
        String name = sc.next();
        System.out.println("姓名:"+name);

        System.out.println("请输入5个数字:");
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();
        int d = sc.nextInt();
        int e = sc.nextInt();
        System.out.println(a+","+b+","+c+","+d+","+e); 
        sc.close();
    }
}

通过这一部分代码我们可以发现,在调用Scanner类的方法的时候,需要定义一个需要的类,比如第一组就是定义了String类型的变量name,第二组定义了int类型的变量a ,b , c

2.2random

第二个类是random,他的作用是产生随机数。使用方式与Scanner类似:

1.第一步是导包,使用命令:

import  java.util.Random;

2.创建类的对象 Random r = new  Random();

3.最后一步是调用类里的方法:

       r.nextInt(number);     创建一个[0,number)的随机数,

      r.nextDouble();      创建一个[0,1)的随机小数

我们可以参考一个案例:

package com.basic.day03.random;
import java.util.Random;
public class RandomDemo01 {
    public static void main(String[] args) {
        Random r = new Random();
        //产生一个[0,10)区间的一个整数  生成等号前的变量快捷键  alt+enter
       int i = r.nextInt(10);
        System.out.println("i="+i);

        //产生一个[0,11]区间内的一个整数
        int i1 = r.nextInt(12);
        System.out.println("i1="+i1);

        //产生一个[-5,5]区间内的一个整数
        int i2 = r.nextInt(11)-5;
        System.out.println("i2="+i2);


        //产生一个[0,1)内的小数
        double v = r.nextDouble();
        System.out.println("v="+v);


    }
}

由上述代码我们可以发现,第一步操作就是导包,import java.util.Random

之后我们定义了Random的对象r,然后使用类里的方法,定义了一个int类型的变量i

int i = r.nextInt(10);     表示产生了[0,10) 之间的随机整数

下一组i1需要注意的是:在我们所需要的长度是[0,11]时,我们需要把r.nextInt()的值设置成12,因为初始值时开区间,我们需要多+1,后面也会遇到这种情况,

第三组需要的长度是10,我们就需要把长度赋值为11,然后初始值是-5,再把变量-5

第四组是产生小数,可以直接使用  double v = r.nextDouble();

如果数据类型不一致,我们还需要进行强转换。

下一部分我们直接上一个案例,来解释这一部分知识:

package com.basic.day03.random;

import java.util.Random;

/**
 * 练习Random的nextdouble方法
 */
public class RandomDemo02 {
    public static void main(String[] args) {
        Random rd = new Random();
        //随机[0,10)以内的任意小数
        double  num = rd.nextDouble()*10;
        //随机[0,10)以内的任意整数
       int n1 = (int) (rd.nextDouble()*10);
        System.out.println(n1);
        //随机[-6,6]以内的任意整数
        int n2 =(int)(rd.nextDouble()*13-6);
        System.out.println(n2);
        //随机[5,15]以内的任意的整数
        int n3 =(int)(rd.nextDouble()*11+5);


        /**
         * 通过上述练习可以总结一个公式:
         * 闭区间公式:[n,m]     r.nextDouble()*(m+1-n)+n
         * 开区间公式:[n,m)     r.nextDouble()*(m-n)+n
         */
        //[98,155]随机整数
        int n4 = (int)(rd.nextDouble()*58+98);
    }
}

在这里我们用的方法都是  r.nextDouble();方法,在一些情况下需要进行强转换,第一组代码十分简单,我们就不过多赘述,第二段代码因为要生成整数,但是方法生成的是浮点数,多以需要强转换,并且需要把方法的所有内容打上(),

第三段代码生成长度要求是12,所以我们需要把方法的原有量*(12+1),然后对整个方法-6来设置偏移量,下一段也是同样的道理,长度要求是10,所以*11,然后偏移量是5,对整个方法+5,感兴趣可以看一下公式,更方便理解,需要注意:开区间就不必+1了,而闭区间需要。

2.3数学工具类:

这之中包括了许多的数学工具,可以帮助我们开发,使用方式比较简单,直接使用类名后面加上具体方法名调用即可。工具的种类有很多,比如:

1.静态常量:  E(自然对数)  PI(圆周率)  

2.常用函数:max()   min()   random()取随机数  

abs()取绝对值

取整函数: ceil()向上取整  floor()向下取整

rint()返回距离该数最近的整数   round()四舍五入

指数函数: pow() 幂函数  sqrt()平方根  cbrt()立方根

三角函数: sin() cos() tan()

具体的使用方法我们通过实例来了解:

package com.basic.day03.random;
public class MathDemo01 {
    public static void main(String[] args) {
        System.out.println("自然对数:"+Math.E); //double类型
        System.out.println("圆周率"+Math.PI);

        System.out.println("3和5比较,其中最大值:"+Math.max(3,5));
        System.out.println("3和5比较,其中最小值:"+Math.min(3,5));
        System.out.println("-3的绝对值:"+Math.abs(-3));



        //使用Math.random()产生一个随机数,默认是[0,1)区间的小数
        //[5,10]
        int i = (int)(Math.random()*6+5);
        System.out.println("产生的随机数:"+i);



        System.out.println("3.4向上取整:"+Math.ceil(3.4));
        System.out.println("3.4向下取整:"+Math.floor(3.4));
        System.out.println("3.4最近取整:"+Math.rint(3.4));
        System.out.println("3.4四舍五入:"+Math.round(3.4));

        System.out.println("3的四次方:"+Math.pow(3,4));
        System.out.println("8的平方根:"+Math.sqrt(8));
        System.out.println("8的立方根:"+Math.cbrt(8));
    }
}

返回的结果:

一般来讲,他们的使用方法都是Math.+函数名称,需要注意的是:产生随机数时,依旧是像Random类一样,初始值都是[0,1),需要自己找范围。

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值