2.1Java基础语法(运算符、键盘录入、流程控制语句)

一、运算符

A:算术运算符:+,-,*,/,%模(取余)

a.+的几种作用:加法;正数;字符串连接符(应用最广泛)

b./:整数相除,只能得到整数;

     要想得到小数,可以给分子或者分母乘以一个浮点类型数据

c.%:(除法):取的是余数

例1:

/*

 *题目1

 *int a = 10;

int b = 10;

int c = 10;

 

a = b++;

c = --a;

b = ++a;

a = c--;

请分别计算出a,b,c的值

题目2:

int a = 4;

int b = (a++)+(++a)+(a*10);

 * */

public class OperatorTest {

public static void main(String[] args) {

int a = 10 ;

int b = 10 ;

int c = 10 ;

a = b++;//a=10,b=11,c=10

c = --a;//  a=9,b=11,c=9

b = ++a;//   a=10,b=10   ,c = 9

a = c -- ;//a=9,b=10,c = 8

System.out.println("a:"+a);

System.out.println("b:"+b);

System.out.println("c:"+c);

System.out.println("----------------");

int x = 4 ;

int y = (x++)+(++x)+(x*10);

//x:4,5,6

//y= 4 +6+60

System.out.println("x:"+x);

System.out.println("y:"+y);

}

}

扩展的算术运算符:++,--

1.++或者--单独使用:

无论++或者--在前还是在数据的后面,都是自增1或者自减1

2.++或者--参与运算的使用:

++--在数据的后面,先参与运算(赋值),然后在自增1或者自减1;

++--在数据的前面,先自增1,或者自减1,然后把最终的得到的结果进行赋值运算

B:赋值运算符

符号:= , +=, -=, *=, /=, %=

=:为基本的赋值运算符,其他的为扩展的赋值

例2:

如下操作写出结果

int a,b; a = b = 10;

System.out.println(a); System.out.println(b);

int a = 10; a += 20;//相当于把符号的左边的值和右边的值相加,赋值给左边

System.out.println(a); 

面试题:

short s=1, s = s+1; short s=1, s+=1;

上面两个代码有没有问题,如果有,那里有问题

//第一个有问题:隐含了一个默认类型转换:类型不匹配:等号右边最终int类型,而等号左边属于short类型

  第二个没有问题:扩展的赋值运算符隐藏了强制类型转换!

C:比较运算符>,>=,<,<=,!= ,==

 1)无论结果是复杂的还是简单的,结果都是boolean型,也就是要么是true,要么是false

 2)比较运算符==”不能误写成“=” 。

例3:3<x<6

 java语言中不能这样写,得用逻辑运算符连接 

D:逻辑运算符可以连接某个值或者某一个表达式:

 1&:逻辑与:并且的意思(并列关系)

     特点:falsefalse

 2|:逻辑或:两个满足一个条件即可

    特点:truetrue

 3^:逻辑异或

    特点:相同则为false,不同则为true

 简单记:男男

        男女

        女男

        女女

 4!:逻辑非

     特点:falsetrue,truefalse,

     偶数个非数它本身

逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6

5&”和“&&”的区别:

&时,左边无论真假,右边都进行运算;

&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。

6|”和“||”的区别同理,双或时,左边为真,右边不参与运算。

7异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false

扩展的逻辑运算符

 逻辑双与:&&

 逻辑双或:||

 问题:逻辑单与:&和逻辑双与&&的区别?

 共同点:两个表达的效果是一样的:falsefalse

 短路效果(笔试题中出现的比较多)

 逻辑双与:&&:具有短路效果:左边的表达式如果是false,则右边不执行

逻辑双或:||具有短路效果:左边如果是true,右边不执行.

E:位运算符&(位与),|(位或),^(位异或),~(反码的意思):按位取反

注意事项:

计算一个数据对另一个数据进行位运算操作,就必须算出该数据对应的二进制数据

<<:左移动

>>:右移动

 >>>:无符号右移

例4:

 计算出34对应的二进制数据

 * 0b11

 * 0b100

 *3对应的二进制数据:4个字节

 *00000000000000000000000000000011

 *4..

 *00000000000000000000000000000100

 *

 *&:00

 *    00000000000000000000000000000011

 *(&)00000000000000000000000000000100

 *    00000000000000000000000000000000

 *结果:0

 *

 *|:11

 *    00000000000000000000000000000011

 *(|)00000000000000000000000000000100

 *    00000000000000000000000000000111

 *结果:7

 *

 *^:相同则为0,不同则为1

 *    00000000000000000000000000000011

 *(^)00000000000000000000000000000100

 *    00000000000000000000000000000111

 *结果:7

 *

 * ~:反码:按位取反,01,10

 *   ~00000000000000000000000000000011

 *   11111111111111111111111111111100(补码)

 *

 *补码,求原码

 *   11111111111111111111111111111100(补码)

 *  -1(在补码的末尾-1得到反码)

 *   11111111111111111111111111111011 (反码)

 *   10000000000000000000000000000100(原码)

 *

 *结果:-4

例5:

/*

 *<<:左移动:最高位丢弃掉,在右边补齐0

 *>>:右移动:最高位是1,左补齐1,最高位为0,左补齐0

 *>>>:无符号右移:无论最高符号位是1还是0,左边补齐0

 * */

public class OperatorDemo4 {

public static void main(String[] args) {

//<<符号左边的数据乘以2的移动次幂

System.out.println(3<<2);// 3 * 2^2 = 12

//>>符号左边的数据除以2的移动次幂

System.out.println(24>>2);//24/4 = 6

System.out.println(-24>>2);

System.out.println(-24>>>2);

}

}

例6: 

/*

 *-24对应的二进制数据

 *10000000000000000000000000011000 :原码

 *11111111111111111111111111100111:反码

 *  +1

 *11111111111111111111111111101000补码 

 *

 *11111111111111111111111111101000补码去右移2

 *1111111111  11111111  11111111  111010(00)(补码)

 *  -1

 *1111111111  11111111  11111111  111001:反码

 *1000000000  00000000  00000000  000110:原码:

 *

 *结果:-6

 *

 *

 *-24>>>2

 *11111111111111111111111111101000

 *0011111111  11111111  11111111  111010(00)

 *结果:1073741818

 *

 * */

【位运算符(^)的特点(重点:考点)】

^运算符的特点:一个数据被另一个数据位异或两次,其值本身不变

例7:

public class Operato rDemo2 {

public static void main(String[] args){

//定义两个变量

int a = 10 ;

int b = 20 ;

System.out.println(a ^ b ^ b);

System.out.println(a ^ b ^ a);

}

}

/*

 *面试题

 *请实现两个数据值的交换

 *

 *如果没有告诉什么数据类型,一般默认int类型

 * */

public class OperatorDemo3 {

public static void main(String[] args){

//两个变量

int a = 10 ;

int b = 20 ;

System.out.println("a:"+a+",b:"+b);

System.out.println("-----------------");

//方式1:采用中间变量的方式:(开发中常用)

//int c = a ;

//a = b ;

//b = c ;

//System.out.println("a:"+a+",b:"+b);

//System.out.println("-----------------");

//方式2:面试中使用的:采用位异或的特点去实现(想问的就是是否能说了位异或^特点)

//=号左边:a,b,a

//=号右边:a^b

//a = a ^ b ;

//b = a ^ b ;//b = a ^ b ^ b

//a = a ^ b ;// a = a ^ b ^ a

//System.out.println("a:"+a+",b:"+b);

//方式3:

//采用变量相加的方式

a = a + b ;//a = 3 0;

b = a - b ;// b = 30 - 20 ;

a = a - b ;//a = 30- 10

System.out.println("a:"+a+",b:"+b);

}

} 

F:三目运算符

   1单目运算符:~3

     双目运算符:3+4

     三目运算符也叫三元运算符

   2格式:

      (关系表达式)?表达式1:表达式2

      如果条件为true,运算后的结果是表达式1

      如果条件为false,运算后的结果是表达式2

     表达的结果是一个boolean类型

   3执行流程:

  先判断表达式是否成立,如果 成立,就是一个true,把表达式1作为true的结果

  如果不成立,就是false,把表达式2作为false的结果

   4示例:

例8:

获取两个数中大数。

int x=3,y=4,z;

z = (x>y)?x:y;//z变量存储的就是两个数的大数。

例9:/*

 *练习:

 *求两个数据的最大值

 *求三个数据的最大值

 *求两个数据是否相等

 * */

public class OperatorTest {

public static void main(String[] args) {

//定义两个变量

int a = 100 ;

int b = 200 ;

//定义max变量

int max = (a> b) ? a : b ;

System.out.println("两个数据的最大值是:" + max);

System.out.println("-------------------");

//求三个数据的最大值

int x = 10 ;

int y = 30 ;

int z = 20 ;

//定义中间变量(第三方变量)记录前两个值的最大值

int temp = (x>y) ? x : y ;

//用中间变量和z进行比较

int max2 = (temp > z) ? temp : z ;

System.out.println("三个数据的最大值是:" +max2);

System.out.println("-------------------");

//一步搞定

int max3 = (x>y) ? ((x>z)? x : z) : ((y>z) ? y : z) ; //不建议这样使用

System.out.println("max3:" + max3);

int m = 100 ;

int n = 200 ;

//定义标记flag

//boolean flag = (m==n) ? true : false ;

boolean flag = (m==n) ;

System.out.println(flag);

}

}


二、键盘录入

由于之间对数据进程比较或者操作,值都是已经给定的,不随机;

为了程序更加灵活,所以加入这样键盘录入数据!

1如何实现键盘录入数据呢?(目前先记住使用)

   javaAPI给提供(Sacnner)

   导包(位置放到class定义的上面)

   import java.util.Scanner;

   创建对象

   Scanner sc = new Scanner(System.in);

   接收数据

   int x = sc.nextInt();

   输出语句输出我们的值;

例10:

//需求:求两个数据中的最大值,用键盘录入数据改进

//:三个数据最大值,键盘录入数据

import java.util.Scanner ;

public class ScannerTest {

public static void main(String[] args) {

//创建键盘录入对象

Scanner sc = new Scanner(System.in) ;

//提示

System.out.println("请您输入第一个数据: ");

//接收第一个数据

int a = sc.nextInt();

System.out.println("请您输入第二个数据: ");

//接收第二个数据

int b = sc.nextInt() ;

//求最大值:直接使用三元运算符

//定义max变量

int max = (a>b) ? a: b ;

System.out.println("两个数据中的最大值是:" +max);

}

}


三、流程控制语句

A顺序结构:

       是程序中最简单最基本的流程控制,代码从上到下依次执行,有这样一种顺序流程.

B:选择结构:也被称为分支结构。

1)if语句:

a.格式1:

 if(表达式){

 语句;

 }

  执行流程:首先进来看表达式是否成立,如果为true,就执行这个语句

 如果是false,就不执行

b.if语句的第二种格式:

  if(表达式1){

  语句1;

  }else{

  语句2;

  }

执行流程:

首先判断表达式1是否成立,如果是true,则执行语句1;

 如果是false,执行语句2

c. if语句的第三种格式:

 if(表达式1){

  语句1;

  }else if(表达式2){

 语句2;

  }else if(表达式3){

  语句3;

  

  ....

  }else{

  语句n;

  }

执行流程:首先判断表达式1是否成立,如成立,true,执行语句1;

  如果是false,再次表达式2是否成立,true,执行语句2;

  如果还不成立,再次判断表达式3是否成立,true,执行语句3;

 最终上述都不成立,走到else里面

  

  if语句的应用场景

   格式1:针对单个表达式判断

   格式2:针对两个表达式判断

  格式3:针对多个判断

d:if语句的注意事项:

  如果if语句里面只有一条语句,if(表达式)后面的大括号可以省略,但是建议不要省略,永远给出大括号;

  if语句的表达式不管是简单的还是复杂的,最终是boolean类型;

  if语句里面,有分号的地方不能有左大括号,有左大括号的地方不能有分号!

11

package 选择结构语句_If语句;

 

import java.util.Scanner;

 

/*

 *键盘录入x的值,计算出y的并输出。

1:xy的关系满足如下:

x>=3y = 2x + 1;

-1<=x<3y = 2x;

x<=-1y = 2x1;

 

 * */

public class IfTest {

public static void main(String[] args) {

//创建键盘录入对象

Scanner sc = new Scanner(System.in);

System.out.println("请输入x的值:");

int x = sc.nextInt() ;

//使用if语句的第三种格式:针对多个判断进行操作

int y ;

if(x>=3){

y = 2* x + 1 ;

}else if(x >= -1 && x < 3){

y = 2 * x ;

}else {

y = 2 * x - 1 ;

}

System.out.println("y:" +y);

}

}

例12

package 选择结构语句_If语句;

 

import java.util.Scanner;

 

/*

 *盘录入月份的值,输出对应的季节

 *

 *3,4,5春季

 *6,7,8夏季

 *9,10,11秋季

 *12,1,2冬季

 * */

public class IfTest2 {

public static void main(String[] args) {

//创建键盘录入对象

Scanner sc = new Scanner(System.in) ;

System.out.println("请输入一个月份的值(1-12): ");

int month = sc.nextInt() ;

//使用if语句的第三种格式

/*if(month<0 || month >12){

System.out.println("地球上没有该月份!");

}else if(month == 3){

System.out.println("春季");

}else if(month == 4){

System.out.println("春季");

}else if(month == 5){

System.out.println("春季");

}else if(month == 6){

System.out.println("夏季");

}else if(month == 7){

System.out.println("夏季");

}else if(month == 8){

System.out.println("夏季");

}else if(month == 9){

System.out.println("秋季");

}else if(month == 10){

System.out.println("秋季");

}else if(month == 11){

System.out.println("秋季");

}else {

System.out.println("冬季");

}*/

//虽然可以实现,代码比较繁杂

//改进:3,4,5--->春季

//if(month<0 || month>12){

//System.out.println("地球上没有该月份!");

//}else if(month == 3 || month == 4 || month == 5){

//System.out.println("春季");

//}else if(month == 6 || month == 7 || month == 8){

//System.out.println("夏季");

//}else if(month == 9 || month == 10 || month == 11){

//System.out.println("秋季");

//}else{

//System.out.println("冬季");

//}

//最终版代码:改进

if(month<0 || month>12){

System.out.println("地球上没有该月份!");

}else if(month >=3 && month <= 5){

System.out.println("春季");

}else if(month>= 6 && month <=8){

System.out.println("夏季");

}else if(month >=9 && month <= 11){

System.out.println("秋季");

}else{

System.out.println("冬季");

}

}

}

例13

package 选择结构语句_If语句;

 

import java.util.Scanner;

 

/*

 *获取三个数据中的最大值,键盘录入

 

 * */

public class IfTest3 {

public static void main(String[] args) {

//创建键盘录入对象

Scanner sc = new Scanner(System.in) ;

System.out.println("请输入第一个数据:");

int a = sc.nextInt() ;

System.out.println("请输入第二个数据:");

int b = sc.nextInt() ;

System.out.println("请输入第三个数据:");

int c = sc.nextInt() ;

//使用三元运算符/:采用第三方变量去实现

int temp= ( a > b) ? a : b ;

int max = (temp > c) ? temp : c ;

System.out.println("三个数据的最大值是:" + max);

System.out.println("--------------------");

//if语句的嵌套

int max2;

if(a > b){

if(a>c){

max2 = a ;

}else {

max2 = c ;

}

}else{//b>a

if(b>c){

max2 = b ;

}else{

max2 = c ;

}

}

System.out.println("max2:" +max2);

}

}

 

2)switch语句

a.格式:

switch(表达式){

 case1:

 语句1;

  break;

 case2:

  语句2;

 break;

  ....

 default:

 语句n+1;

  break;

  }

b.执行流程:

首先用siwtch后面表达式的值和case后面的值进行比较,如果和值1相等,执行语句1,

 如果不相等,跟值2比较,成立,执行语句2,遇见break:结束

 如果上述没有相等的值,执行default中的语句

 面试题: switch语句后面可以跟byte类型吗

  switch语句后面可以跟long类型吗

  switch语句后面可以跟String类型

  

 switch后面的数据类型可以是什么类型!

 

本身能跟的类型:int,byte,short,char

 JDK5.0以后:可以根据枚举类型

JDK7以后,可以跟String类型

 break:表示中断的意思,遇见switch语句结束

switch语句的结束条件什么?

 1)遇见break结束

 2)程序默认执行到末尾

 case:后面的值只能常量:不能变量-------------->javascript:脚本语言中switch语句中case:可以跟常量,可以个变量,可以跟表达式

  default里面的break可以省略,但是不建议省略

例14:

需求:键盘录入数据,判断星期几(1-7)

public class IfTest3 {

public static void main(String[] args) {

//创建键盘录入对象

Scanner sc = new Scanner(System.in) ;

 *

 * */

public class SwitchDemo {

public static void main(String[] args) {

//创建键盘录入对象

Scanner sc = new Scanner(System.in);

System.out.println("请输入一个值:(1-7)");

int weekNumber = sc.nextInt() ;

//使用switch语句去完成

switch(weekNumber){

case 1:

System.out.println("星期一");

break ;

case 2:

System.out.println("星期二");

break ;

case 3:

System.out.println("星期三");

break ;

case 4:

System.out.println("星期四");

break ;

case 5:

System.out.println("星期五");

break ;

case 6:

System.out.println("星期六");

break ;

default:

System.out.println("星期天");

break ;//可以省略的

}

}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值