键盘录入
导包:import java.util.Scanner;
main函数
Scanner scan = new Scanner(System.in);
String s1 = scan.next();
如果你想要输入的内容是String类型的:
String s1 = scan.next();
如果你想要输入的内容是数值类型的:
int s2 = scan.nextInt();
输入三个数值:
将这三个数值进行从大到小输出??
要求 通过控制台输入你的姓名 性别 年龄 身高 和性格 ,做一个简单的自我介绍
运算符:
1、算术运算符
+、-、*、/、%
- :字符串的连接
2、赋值运算符
=、+=、-=、*=、/=、%=、<<=、>>=、>>>=
3、比较运算符
、<、>=、<=、!=、==
4、逻辑运算符
&、|、!、&&、||、^
&:无论第一个表达式是真是假,他都去执行第二个表达式
&&:如果第一个表达式为fasle ,就不执行第二个表达式
||:如果第一个表达式为true,就不执行第二个表达式
5、三目运算符
int a = x > y ? 200 : 300 ;
6、位运算符
按位与:&
按位或:|
按位异或:^
按位取反:~
左移:<<
右移:>>
无符号右移:>>>
<<: 左移
2<<2 2<<3
左移:逐渐增大,24=8,28=16. 22(2)=8,22(3)=16,这个数乘以它左移的个数次幂(以2为基数)
00000000 00000000 00000000 00001000 8
00000 00000000 00000000 00000010000 16
: 右移
8>>2 4>>1 6>>2
右移:逐渐减小,8/4=2,4/2=2 ,8/2(2)=2,4/2(1)=2,这个数除以它右移的个数次幂(以2为基数)
如果最高位是0,你右移多少位就在你的最高位补上多少个0
如果最高位是1,你右移多少位就在你的最高位补上多少个1
6/2(2)=1
0000000000 00000000 00000000 000010 2
000000000 00000000 00000000 0000010 2
: 不带符号右移
无论你的最高位是0还是1 你右移多少位都在你的最高位补上多少个0
按位与:&
2 & 3
010
&011
——————
010
结果为:2
4 & 6
100
&110
——————
100
结果为:4
3 & 5
011
&101
——————
001
1 & 2
001
&010
——————
000
结果为:0
按位或:|
3 | 4
011
|100
——————
111
结果为:7
2 | 3
010
|011
——————
011
结果为:3
12 | 15
1100
|1111
——————
1111
结果为:15
按位异或:^
2 ^ 3
010
^011
——————
001
结果为:1
4 ^ 7
100
^111
-————
011
结果为:3
27 ^ 25
11011 64 32 16 8 4 2 1
^11001
————————
00010
结果为:2
位求反:~
5的补码是它本身(ps:正数的原、反、补码都是它本身;负数的原码最高为为1开头,反码是最高符号位不变,其余位在原码的基础上取反,
原码: 1111 0010
反码:1000 1101
补码:1000 1110
补码是在反码的基础上+1即可得到)
5的补码:00000101
~5 (也就是5按位取反运算,下面涉及的是补码运算):
00000101按位取反,这里需要将原始01串完全反转过来,不存在最高符号位的概念,取反结果为: 11111010
注意这里的结果是用补码表示的,毕竟这还是机器表示形式,转化为自然语言的编码,把结果转化为原码就是:
补码-1转为反码: 11111010 - 1 = 11111001
反码再取反转为原码:11111001 = 10000110
原码转为十进制,答案就是-6
7、优先级
控制流程:
分支结构if:
1、if(这个条件满足){
执行代码;
}
如果明天天气好,我们就去打球。
2、if(a > b){
System.out.println(a);
}else{
System.out.println(b);
}
三目运算符:int c = a > b ? a : b;
三目运算符是if else的一个简化。
3、if(这个条件满足){
执行代码;
}else if(这个条件满足){
执行这里面的代码;
}…
{
}else{
执行最后的代码;
}
顺序结构:
System.out.println(a);
System.out.println(b);
System.out.println©;
System.out.println(d);
System.out.println(e);
int x = 5;
switch(x){
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;
case 7:
System.out.println(“星期天”);
break;
default:
System.out.println(“出错啦!”);
break;
}
语法格式:
switch(表达式){
//case里面的break必须给他写上。
case 常量值1:
语句块1;
break;
case 常量值2:
语句块2;
break;
case 常量值3:
语句块3;
break;
…
default:
语句块n+1;
break;//default里面的break可写可不写
}
执行过程:
1、入口
当switch(表达式)的值与case后面的某个常量值匹配上,那么就从这个case进入;
当switch(表达式)的值与case后面的所有的常量值不匹配,那么就从default分支进入;
注意:一旦从“入口”进入switch,就是顺序往下执行,直到遇到“出口”。
2、出口
a、中断出口:
遇到break就跳出。
b、自然出口:
遇到switch的结束 } 就跳出。
switch语句中的规则:
1、switch中的变量类型:byte、short、int、long、char。最常用的是int
2、switch语句可以拥有多个case语句,并且每一个case后面跟一个要比较的值和冒号。
3、case中的值的类型必须和switch中值的类型一致。
4、当switch里面值和case里面的值匹配上之后,执行case后面的语句,直到break语句的时候才会跳出switch语句。
5、如果case后面没有break,执行的时候,继续往下执行,直到遇见break。才会跳出switch。
6、switch语句可以包含一个default分支,里面的break可写可不写。位置灵活,但是通常放在最后。
7、case后面只能填写变量的值,不能写范围。
if和Switch的应用场景和特点:
if:
1、对具体的值进行判断。
2、对区间判断。
3、对运算结果是boolean类型的表达式进行判断。
Switch:
1、对具体的只进行判断。
2、值的个数通常是固定的。
对固定的值进行判断时,建议使用Switch语句,因为Switch语句会将具体的答案都进行加载进内存。
效率相对较高。
(Switch功能性较差,书写麻烦,所以没有if常用)
循环结构:
什么是循环??
循环就是在循环条件满足的情况下,反复的执行代码块。
我们为什么要使用循环??
比如
我们要去打印100次hello或者我们想实现1-10的和
这些相同的内容,我们就可以使用循环。
循环的分类:
while循环
格式:
while(boolean表达式){
执行的代码块;
}
执行过程:
先判断表达式的值,如果为true,就执行循环体。
先判断,然后再去执行。
练习一:
需求:打印输出5次hello
//初始化变量
int i = 0;
//循环条件
while(i < 5 ){
//循环体
System.out.println(“hello”);//0 1 2 3 4
//更新循环变量
i++;
}
练习二:
需求:打印输出1-10
int i = 1;
while(i <= 10){
System.out.println(i);//1 2 3 4 5 6 7 8 9 10
i++;
}
练习三:
需求:求1-100的和
int i = 1;
int sum = 0;
while(i <= 100){
sum = sum + i;//sum += i;
i++;
//sum i
1 2
1+2 3
1+2+3 4
... .
1+2+...+99 100
1+..+100 101
}
System.out.println(“1-100的和是:” + sum);
练习四:
需求: 求4的阶乘。//4321
int i = 1;
int sum = 1;
while(i <= 4){
sum = sum * i;//1234
i++;
}
System.out.println(“4的阶乘是:”+ sum);
练习五:
需求: 求100以内的 偶数 的和。
2 4 6 8 10
第一种方法:
int i = 2;
int sum = 0;
while(i <= 100){
sum = sum + i;
i += 2;
}
System.out.println(“100以内的偶数的和是:”+ sum);
第二种方法:
int i = 1;
int sum = 0;
while(i <= 100){
if(i%2 == 0){
sum = sum + i;
}
i++;
}
System.out.println(“100以内的偶数的和是:”+ sum);
do
while
格式:
do{
语句块;
}while(表达式);
执行过程:
先执行语句块,再去判断表达式的值。若为true,再去执行语句块,否则结束循环。
特点:
先执行,再判断。
练习一:
需求:打印输出5次hello
int i = 0;
do{
System.out.println(“hello”);
i++;
}while(i <= 4);
练习二:
需求: 打印100以内的奇数;
int i = 1;
do{
/*
if(i%2 == 1){
System.out.println(i);
}
*/
System.out.println(i);
i += 2;//i++
}while(i <= 100);
练习三:
需求:打印输出100以内能够被3整除,但是不能被5整除的数。
int i = 1;
do{
if(i%3 == 0 && i%5 != 0){
System.out.println(i);
}
i++;
}while(i <= 100);
总结:
while 和 do-while的区别
while 先执行循环条件,然后在执行循环体。先判断,后执行。
do/while 先执行循环体,然后再去执行循环条件。先执行,再判断
当第一次 就不满足循环条件的时候,while循环就不能执行循环体;do/while 可以执行一次。
int i = 1;
while(i < 1){
System.out.println("…");
i++;
}
do{
System.out.println("…");
i++;
}while(i < 1);
for 循环结构
格式一:
for(i = 1;i < 10; i++){
循环体;
}
格式二:
int i = 1;
for(;i < 10; i++){
循环体;
}
格式三:
int i = 1;
for( ;i < 10; ){
循环体;
i++;
}
格式四:
for(;?{
循环体;
}
相当于我们的while(true)语句;
特点:
for先判断条件,然后再去执行循环体。
如果循环次数确定的情况下,优先选用for循环,循环次数不确定的情况,通常选用while和do/while循环
注意:要防止无限循环,死循环。
多重循环:循环中嵌套其他的循环。
特点:外层循环执行一次,内层循环执行一遍。
第一次进入for循环:先执行表达式一,接着执行表达式二,执行循环体,最后执行表达式三。
第二次:先执行表达式二,接着执行循环体,最后执行表达式三。
练习一:
需求:使用号打印矩形。
for(int i = 1; i <= 5;i++){
for(int j = 1;j <= 5;j++){
System.out.print("");
}
System.out.println();
}
练习二:
需求:打印直角三角形.
*
**
for(int i = 1;i <= 5;i++){
for(int j = 1;j <= i;j++){
System.out.print("*");
}
System.out.println();
}
练习三:
需求:打印等腰三角形
*
空格:3 2 1 0
*:1 3 5 7
for(int i = 1; i <= 4;i++){
for(int j = 1;j <= 4-i; j++){
System.out.print(" “);
}
for(int k = 1;k <= i2-1;k++){
System.out.print("”);
}
System.out.println();
}
练习题四:
需求:打印九九乘法表
11=1
12=2 22=4
13=3 23=6 33=9
for(int i = 1;i <= 9;i++){
for(int j = 1;j <= i ;j++){
System.out.print(j + "" + i + “=” + ij + “\t”);
}
System.out.println();
}
练习题五:
需求:打印水仙花数
水仙花数:指一个n位数(n>=3),它的每个位上的数字的n次幂之和等于它本身。
例如:153 13+53+3^3=1+125+27=153
一位自幂数:独身数
三位自幂数:水仙花数
四位自幂数:四叶玫瑰数
五位自幂数:五角星数
六位自幂数:六合数
七位自幂数:北斗七星数
八位自幂数:八仙数
九位自幂数:九九重阳数
十位自幂数:十全十美数
for(int i = 100;i <= 999;i++){
int baiwei = i/100;
int shiwei = (i%100)/10;//153%100 = 53 53/10 = 5
int gewei = i%10;//153%10 = 3
if(baiweibaiweibaiwei+shiweishiweishiwei+geweigeweigewei == i){
System.out.println(i + “是水仙花数”);
}
}
6. 5文钱可以买一只公鸡,3文钱可以买一只母鸡,1文钱可以买3只雏鸡。
现在用100文钱买100只鸡,那么各有公鸡、母鸡、雏鸡多少只?
for(int i = 0;i <= 20;i++){
for(int j = 0; j <= 33;j++){
for(int k = 0;k <= 300;k++){
if(i + j + k == 100 && i5 + j3 + k/3 == 100){
System.out.println(“公鸡是:”+ i + “\t”+“母鸡是:”+ j + “\t”+“小小鸡是”+ k);
}
}
}
}
4.计算 1+2-3+4-5+6-7…+100的结果**//2+4+6+8+…+100-3-5-7-9-…-99
规律:
主要是偶数累加减掉奇数
int sum = 0;
for(int i = 2;i <= 100;i++){
if(i%2 == 0){
sum = sum + i;//sum += i;
}else if(i%2 != 0){
sum = sum - i;
}
}
System.out.println(sum+1);
**
*
分析:有5行,列数会发生变化
i是控制空格,j是控制*
第一行:i = 0;i < 5; j = 0;j < 5;
第二行:i = 1;i < 5; j = 0;j < 4;
第三行:i = 2;i < 5; j = 0;j < 3;
....
j < (5 - i)
for(int i = 0; i < 5;i++){
for(int j = 0;j < (5 - i));j++{
System.out.print("*");
}
System.out.println();
}
跳转语句
用于实现循环执行过程中的程序流程的跳转。
break 语句 :中断
在switch 条件语句和循环语句中都可以使用break语句,当它出现在switch语句中时,用来终止某个case并且跳出switch结构;
当它出现在循环语句中时,用来跳出循环语句,终止循环。
break 格式:break;
public class Test{
public static void main(String[] args){
int i = 3;
switch(i){
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;
case 7:
System.out.println(“星期天”);
break;
}
}
}
输出结果:星期三,说明当执行到case 3 时满足条件,执行break,跳出整个switch结构。
循环语句(单层循环)
当它出现在循环语句中时,用来跳出循环语句,终止循环。
public class Test1{
public static void main(String[] args){
int i = 1;
while(true){
if(i == 3){
break;
}else{
System.out.println(i);//1 2
}
i++;
}
}
}
continue 语句 翻译:继续
continue 语句用在循环语句中,主要是用来终止本次循环,执行下一个循环。
public class Test2{
public static void main(String[] args){
int sum = 0;
for(int i = 1;i <= 100;i++){
if(i%2 == 0){
continue;
}
sum += i;
}
System.out.println(sum);
}
}
return 语句 翻译:返回
return 语句用于结束一个方法,跳转到上层调用的方法。
break 和 continue 的比较
单层循环中,break跳出单层循环,continue跳出当前循环,继续执行下一次循环。
嵌套循环中,break跳出当前循环,只是跳出当前的这一层循环,如果想要跳出所有的循环,需要逐层加break;
嵌套循环中,continue跳出当前循环,只是跳出当前的这一层循环,如果想要跳出所有的循环,需要逐层加continue;