黑马程序员——Java基础(二)运算符,控制语句
来源:互联网 发布:可牛软件下载 编辑:程序博客网 时间:2024/06/05 23:44
运算符
运算符就是把变量或者常量进行连接的符号。一般是参与运算的符号。
算术运算符:+,-,++,--,/,*,%
整数相除,结果只能是整数。
如果想要小数,那么参与运算的数必须有小数类型(f)。
%运算,运算结果的符号跟左边一致,负数可以参与运算。
++使用的时候,分单独使用和参与运算使用。
加法是从左到右的顺序执行。(正号,加法运算,字符串连接符)
字符串和数字相加的情况,当数字在前是先进行数字的相加,数字在后面时是连接符。
Eg:
int x = 4;
int y = (x++) +(++x)+(x*10);
4 6 60 70
每次遇到参与运算的++时,就直接先把x的值输出到当前位置,再计算x++。
s.o.p(x++);//先输出x的值,在++。
int a = 10;
int b = a++;//++的优先级高于=,但是为什么b=10?
在底层包含了三个步骤:
A:int temp = a;//产生了一个临时变量,先存储下a原来的值。
B:a++;//然后a自增。
C:int b = temp;//把临时的值附给b。
注意:当++在后面参与运算的时候,会产生一个临时变量参与运算。
赋值运算符:=,+=,-=,*=,/=,%=
注意:
short s = 5;
s = s + 2;//报错。
s +=2;//正确。+=这个赋值运算符其实隐含了强制类型转换功能。
//s =(short)(s + 2);
比较运算符:==,!=,>,<,<=,>=,
比较运算符的结果都是boolean型,要么true,要么false。
逻辑运算符:&,&&,|,||,^,!
位运算符:<<,>>,>>>,&,|,^,~
位运算直接对二进制进行运算。
注意:&符号两边是布尔类型的数时是逻辑运算符。
向左或向右移动就是把数据增大或者缩小2的多少倍。(算术左移和逻辑左移)(如果限定在int范围内的话,如果左移32位,还是原来的数。)
位运算能够提高些效率。
char的范围:
00000000 00000000
11111111 11111111
100000000 00000000 -1
2^16-1
面试题:
1,以最高的效率计算2*8:2<<3
2,交换两个数的值。
A:开发用的,采用第三方变量temp。
B:使用^,一个数^另一个数两次还是这个数。
A = A^B
B = A^B;//A^B^B=A
A = A^B;//A^B^A=B
n=n+m;
m=n-m;//n
n=n-m;//m
如果n和m的值非常大时,容易超出类型范围
3,获取60的十六进制
Int num = 60;
Int n1=num & 15=12;//获取60的最低4位,
int temp = 60>>4;//获取下一组4位
int n2=temp & 15=3;//对temp的值获取最低4位
System.out.println((char)(n1-10+'A'));
//注意这里如果是负数的话用>>>
三元运算符:(条件表达式)?表达式1:表达式2
如果使用三元运算符对有强制类型转换的表达式进行判断时,会出现类型转换不了的问题。
如:
n1>9?(char) (n1-10+’A’):n2;//这时如果满足表达式1,则输出为int型。因为(char)(n1-10+'A')计算完是char类型,但是它又跟n2等值在做运算,所以类型又提升成int型了。
语句:
if(a >5)
int x = 5;//报错缺少分号,
因为int x =5;在计算中会被认为是:int x;x=5;两条语句。
作业:
考试成绩分等级。
90-100 A等。
80-89 B等。
70-79 C等。
60-69 D等。
60以下 E等。
请根据给定成绩,输出对应的等级。
键盘录入:
A:main后面的String[] args接受参数。
B:BufferedReader IO流里面。
C:Scanner JDK5以后键盘录入数据的方式。
使用Scanner的步骤:
A:导包:
import java.util.Scanner;
B:创建对象:
Scanner sc = newScanner(System.in);
System.in:是标准的输入流,对应着键盘的录入。
C:调用方法获取int类型的数据
int number = sc.nextInt();
if语句和三元运算符的关系:(没有关系)
在某些条件下,条件语句可以被三元运算符替换。
如果条件语句中是输出语句,则不能被替换。因为运算符连接的必须是结果。
switch中能够传的值有byte,short,int,char类型,JDK5以后可以有枚举,JDK7以后有String类型。
switch注意事项:
A:default可以省略,但是一般不省略,除非你非常明确。default一般用于处理非正常情况。
B:放在最后面的default的break是可以省略的。
放在case语句中的break是可以省略的,但是可能结果有问题,所以一般不省略。
C:default可以不放到最后。但是一般都放在最后面。
D:switch语句遇到break或者执行到switch语句的末尾。
Eg:
int x = 4;
switch(x)
{
default:
S.o.p(d);
case 1:
s.o.p(a);
case 2:
s.o.p(b);
case 3:
s.o.p(c);
}
结果是dab,开始顺序匹配,发现没有匹配的,就执行default,输出d,发现没有break,会出现case穿透,直接进入case1,输出a,依次输出bc。
正常情况下,default在最后执行。
应用场景:
如果是对范围做判断,用if语句。如果对几个固定值做判断用switch。
循环语句:
循环语句:
循环体:要做的事。
初始化条件:从哪里开始。
判断条件:在什么情况下结束。
控制条件:控制台初始化条件的变化。
for循环:
eg:
for(sop(a);sop(b);sop(d))
sop(c);
//报错,因为sop(b)没有办法判断真假。
写程序定义变量的注意问题:
什么时候定义变量:有变化的内容的时候。
定义范围:首先在小范围定义,如果不行,大范围。
如果先在大范围内定义了,不能再在这个范围内的小范围内重复定义。
变量在那个{}内定义的,就在这个{}有效。
while循环:
如果用while(true);//死循环。相当于while(true){}
while和for的区别:
变量仅仅只做控制作用,用for,因为for结束,变量结束(从内存中消失),效率更高。而while用到的控制变量还在内存中。
什么时候用for,while?
如果是控制范围,最好用for。如果范围不明确用while。比如,我吃小蜜橘,但是不数有几个,直到吃完。
do{}while()循环:
不关怎样都会执行一次。
转意字符
\t等。用"\t",'\t'都可以,和字符串连接使用时用""。
break:结束当前循环。
continue:结束本次循环。
注意:他们一般在循环中的判断使用,直接在判断中用会出错。
在一个完整的操作中,一般位于最后。不然直接报其后的语句是废语句。
break可以用在switch中。
带标号的结束:
首先定义一个标号,使用break或者continue结束到此标号即可。如:标号:for(){break:标号;}
结束循环的方法有三种:break,return,exit。
当break和continue单独存在时,下面可以有任何语句,因为执行不到。报错!!
例子1:
/**根据键盘录入的分数,求这个分数属于哪个等级。*/import java.util.Scanner;class TestDemo3 {public static void main(String[] args){//创建键盘录入对象Scanner sc = new Scanner(System.in);System.out.print("请输入分数(1~100之间的整数):");//必须输入整形,不然报错int sorce = sc.nextInt();String level;if(sorce>=90 && sorce <=100){level = "A等";}else if(sorce>=80 && sorce<90){level = "B等";}else if(sorce>=70 && sorce <80){level = "C等";}else if(sorce>=60 && sorce <70){level = "D等";}else if(sorce>=0 && sorce<60){level = "E等";}else{level = "输入有错";}System.out.println(sorce+"----"+level);}}
例2:
/*需求:键盘录入月份,程序输出x月份是x季节*/import java.util.Scanner;class TestDemo4 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.print("请输入月份(整数1~12):");int mouth = sc.nextInt();String JiJie;if(mouth == 3 || mouth == 4 || mouth == 5){JiJie = "春季";}else if(mouth == 6 || mouth == 7 || mouth == 8){JiJie = "夏季";}else if(mouth == 9 || mouth == 10 || mouth == 11){JiJie = "秋季";}else if(mouth == 12 || mouth == 1 || mouth == 2){JiJie = "冬季";}else{JiJie = "输入有误";}System.out.println(mouth+"是"+JiJie);}}
例3:
/*需求:8848米的厚度,一张足够大的纸0.01米,折叠多少次可以成珠穆朗玛峰的高度?思路:1,循环次数不明确,用while。2,每次折叠,厚度是之前的2倍。所以每次乘以2.3,在while循环里面判断乘积是否大于等于8848*/float h = 0.01F;//纸的厚度int n = 0;//循环次数while(true){if(h >= 8848){System.out.println("折叠的次数为:"+n);break;}else{//统计次数n++;//厚度变化h *= 2;}}
例4:
/*需求:用do while做1-100偶数之和思路:1,1~99偶数之和,用d作为计数器,sumD作为接收结果的变量2,偶数%2的值为03,可以用do while*//*老师思路:1,求1-100之和,通过for循环就可以搞定2,求偶数的和,先要判断是偶数。如何判断?d%2 = 0是偶数;是1则为奇数。*/int d = 1;int sumD = 0;do{if(d%2 == 0)sumD += d;d++;}while(d<100);System.out.println("1-99的偶数和是:"+sumD);
例5:
/*需求:求100-999之间的水仙花数思路:1,水仙花数是指一个数的各个位的立方之和等于其本身。2,用for循环3,如何求各个位的数?153?个:153%10;十;(153/10)%10;百:(153/100)%10;*/for(int i=100;i<1000;i++){//求个位int g = i%10;//求十位int s = (i/10)%10;//求百位int b = (i/100)%10;if((g*g*g+s*s*s+b*b*b) == i)System.out.println(i);}
例6:
/*需求:正直角三角形思路:1,嵌套for循环2,y控制列数,y的值岁行的值而变*/for(int x=0;x<5;x++){for(int y=0;y<x+1;y++){System.out.print("*");}System.out.println();}
例7:
/*需求:打印倒直角三角形思路:1,列数随行数变化,随着行数增加列数减小2,设置一个变量控制行数,行数x<n,列数随着行数变化y=n-x*/int n = 5;for(int x=0;x<n;x++){for(int y=0;y<n-x;y++){System.out.print("*");}System.out.println();}
例8:
/*需求:打印菱形* * * * * * * * * * * * * * * *思路:1,需要两个嵌套for循环。第一个打印正的三角形,第二个打印倒三角形。2,正三角:设正三角形的行数为m,(x从0开始)则第x行需要打印x+1个* ,第x行需要y=m-(x+1)个空格。3,倒三角:行数为(m-1),(x从0开始)第x行需要x+1个空格,第x行需要(m-1)-x个* 。*/int m = 8;for(int x=0;x<m;x++){//先打印空格for(int z=0;z<m-(x+1);z++){System.out.print(" ");}//打印*for(int y=0;y<x+1;y++){System.out.print("* ");}System.out.println();}for(int x=0;x<m-1;x++){//空格for(int z=0;z<x+1;z++){System.out.print(" ");}//*for(int y=(m-1)-x;y>0;y--){System.out.print("* ");}System.out.println();}System.out.println("---------------------------------");/*99乘法表很简单,但是注意用\t制表符。面试的概率很大。*/for(int x=1;x<10;x++){for(int y=1;y<=x;y++){System.out.print("x*y="+x*y+"\t");}System.out.println();}
例9:
/*需求:输出一个正三角形* *** ***** *******思路:1,用v表示要打印的行数,x控制行,y控制列2,发现:行和列的关系:y=2*x-1;空格z和行数的关系是z=v-x*/int v = 8;for(int x=1;x<=v;x++){//空格for(int z=0;z<v-x;z++){System.out.print(" ");}for(int y=0;y<2*x-1;y++){System.out.print("*");}System.out.println();}
- 黑马程序员——Java基础(二)运算符,控制语句
- 黑马程序员——Java基础(三)之运算符、键盘录入、流程控制语句
- 黑马程序员——Java基础语法(二)—运算符、流程控制
- 黑马程序员——基础学习(二)基本运算符和基本逻辑语句
- 黑马程序员——Java基础语法(一)---数据、数值类型、运算符、程序流程控制语句和循环结构
- 黑马程序员 Java基础1——Java控制语句
- 黑马程序员——java基础<二.控制语句+函数+数组>
- 黑马程序员——Java基础(二) -- 流程控制语句和方法
- 黑马程序员 Java基础<二> 运算符
- 黑马程序员——Java基础语法---流程控制语句
- Java语言基础(二)——数据类型、运算符和流程控制语句
- 黑马程序员---java基础---运算符、键盘录入、流程控制语句
- 黑马程序员——C控制语句(二)
- 黑马程序员——java编程基础(二)选择结构语句、循环结构语句、方法
- 黑马程序员——Java基础---变量、运算符、语句总结
- 黑马程序员——java基础---位移运算符和键盘录入和switch语句
- 黑马程序员_Java基础(环境搭建,常量变量,类型转换,运算符,控制语句)
- 黑马程序员 Java基础(流程控制语句)
- 如何获得数据库中的数据库名,表名,字段名,字段个数
- DirectX11 光照演示示例Demo
- deepin配置root登入
- Swift 2.0 之map 与 zip
- PAT1011 A+B和C (15)
- 黑马程序员——Java基础(二)运算符,控制语句
- Sum Root to Leaf Numbers
- Android Material Design:CoordinatorLayout与NestedScrollView
- Navigation自定义
- 算法----数组的排序(冒泡 选择 插入)
- 大连交通大学IPTV使用方法
- SuiShenJi项目_dialog to Activity动画
- Android Material Design Library系列教程(五)
- UVA - 1587 Box