运算符
算术运算符
package day2;
public class Demo9 {
/* 算术运算符 + - * / % ++ -- +: 作用1: 正号 作用2:加法运算 作用3:字符串连接符 -: 作用1: 符号 作用2:减法运算 * / % 只能用作算术运算 数值与数值运算 */ public static void main(String[] args) { /* int a = +30; int b = 20; System.out.println(a+b); System.out.println(a-b); System.out.println(a+'a');// 加法运算 System.out.println(a-'a');// 减法运算 //System.out.println(a+true);// 不可以 int age = 20; String name = "jim"; System.out.println("姓名:"+name+",age:"+age); System.out.println("---------------------"); System.out.println(a*b); System.out.println(a/b);//1 整数/整数==结果是整数 System.out.println(a%b); //取模 求余数 */ /* 自增运算,自减运算 都只能用于数值类型 ++ -- */ /* int a = 5; ++a; //a=a+1 a++; System.out.println(a);//7 --a; //a=a-1 a--; System.out.println(a);//5*/ int a = 5; //int b = ++a + 2; 在混合运算时 ++在前 先增再判断 //System.out.println(b);//8int b = a++ + 2; // 在混合运算时 ++在后 先判断再增 System.out.println(b);//7 System.out.println(a);//6
}}
比较运算符
== 和 != 可以用于数值之间比大小,还可以比较布尔类型, 还可以比较引用数据类型
<= >= 和< > 只能用于数值之间的比较 , 包含字符类型 返回值为 true/false
System.out.println(10==10); System.out.println(ture==ture); System.out.println("abc"=="abcd");System.out.println('a'>10); System.out.println(10>5); System.out.println(10>10);
赋值运算符
= 把右边的值赋给左边变量,注意右边字面常量和左边的字面常量需要一致(也可以小类型隐式的转换为大类型的),注意强制类转换
+= a+=b 相当于a=a+b
-= a-=b 相当于a=a-b
*= a*=b 相当于a=a*b
%= a%=b 相当于a=a%b
逻辑运算符
& 逻辑与 | 逻辑或 ! 逻辑非
&& 短路与 || 短路或 ^ 逻辑异或
运算符,都只能是逻辑值与逻辑值之间的运算
package day3;
public class OperDemo3 {
public static void main(String[] args) { int a = 10; int b = 15; int c = 20; /* 逻辑与(&和&&)当所有的表达式结果为true,结果才为true, 只要有一个表达式为false,结果就为false 区别: & : 不会出现短路现象,已经有表达式为false,后面的表达式还会执行 &&: 会出现短路现象 所以也称为短路与.一旦有表达式值为false, 后面其他的表达式就不执行,称为短路了 (常用,效率高) */ System.out.println(a<b & c>b); // true & true = true System.out.println(a<b & c<b); // true & false = false //System.out.println(a>b & c++>b); // false & true = false 没有短路,前面为false 后面c++依然执行 //System.out.println(c);21 System.out.println(a<b && c>b); // true && true = true System.out.println(a<b && c<b); // true && false = false System.out.println(a>b && c++>b); // false && true = false System.out.println(c);//20 } /* | || 子啊表达式中只要有一个是true,结果就为true | 不会出现短路现象 有表达式返回true,但是后面的表达式还会执行 || 会出现短路现象 一旦出现有表达式返回true,后面的表达式就不会执行了 */ System.out.println(a<b | c>b); // true | true = true System.out.println(a<b | c<b); // true | false = true //System.out.println(a<b | c++<b); // true | false = true //System.out.println(c); System.out.println(a<b || c>b); // true || true = true System.out.println(a<b || c<b); // true || false = true System.out.println(a<b || c++<b); // true || false = true System.out.println(c); } }
package day3;
public class OperDemo5 {
/* ^ 逻辑异或 突出重点就是 异 不同返回true,相同返回false */ System.out.println(a<b ^ c>b);// true ^ true = false System.out.println(a>b ^ c>b);//false ^ true = true /* ! 逻辑非 取反 */ System.out.println(!true);//false System.out.println(!(a>b));//true /* int a = 10, b = 10, c = 10; boolean result = a++ == 10 && b-- == 10 || ++c == 10; result= true a=11 b=9 c=10(短路了,没有执行) */}}
条件运算符
结果 = (条件表达式)?结果1:结果2;
当条件表达式结果为true 时,返回?后面的结果
当条件表达式结果为false时,返回:后面的结果
条件表达式必定要返回结果(与 if{ }else{ }不一样) 返回的结果 与 接收变量类型都得一致
package day3;
public class OperDemo6 {
public static void main(String[] args) { /* int score = 50; String result = (score>=60)?"及格":"不及格"; System.out.println(result);*/ int a = 10; int b = 20; int max = (a>b)?a:b; System.out.println(max); }}
位运算符
是对整数的二进制位进行运算的
<< 左移 二进制比特位向左移动 后面空缺补0
>> 右移 二进制比特位向右移动 带符号的移动 正数移动后,符号位补0, 负数移动后,符号为补1
>>> 无符号右移 不管是正数还是负数 移动后统一补0 结果肯定为整数
& 和 | 既可以当做逻辑运算符,也可以当做位运算符 当&和 | 左右是逻辑值(true/false) 时,当做逻辑运算符 当&和 | 左右是正数时,当做位运算符
package day3;
import java.lang.reflect.Array; import java.util.Arrays; import java.util.HashMap;
public class OperDemo7 {
public static void main(String[] args) { int a = 2; // 0000 0010 // 0000 1000 int b = a<<2;//左移两位 System.out.println(b); //0000 1000 //0000 0010 int c = -8; int d = c>>2; System.out.println(d);//-2 /* int x = 8; int y = x>>>1; System.out.println(y);//4*/ int x = 8; int y = x>>>1; System.out.println(y);//4 int x = -8; int y = x>>>1; System.out.println(y);//2147483644 }}
package day3;
public class OperDemo8 {
public static void main(String[] args) { //System.out.println(true & false); //System.out.println(true | false); int a = 5; int b = 4; /* & 把两个整数的对应的二进制位进行 列 运算(每一列都是1,结果就是1,否则结果为0) 0000 0101 5 0000 0100 4 0000 0100 4 */ System.out.println(a & b);//4 /* | 每一列只要一位是1,结果就是1,都没有1时才是0 0000 0101 5 0000 0100 4 0000 0101 5 */ System.out.println(a | b);//5 int x = 4; int y = 5; /* ^ 异或 两个数对应列的比特位相同结果0 不同结果为1 0000 0100 4 0000 0101 5 0000 0001 1 */ System.out.println(x^y); /* ~ 取反 0000 0100 1111 1011 */ System.out.println(~x);//-5 /* 计算机中数值存储时,都用的补码存储的 正数的补码 反码 原码三码合一 负数以补码形式表示 数值二进制为什么要用补码存储,因为计算机只做加法, 把减法 转换为加法 3-2 = 1 --> 3+(-2) = 1 +3 0000 0011 -2 1111 1110 0000 0001 2 0000 0010 1111 1101 反码 +1 1111 1110 -2的补码 */ }}
控制台输入
package day3;
//导入类库 import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) { //创建一个输入对象 Scanner scanner = new Scanner(System.in);//相当于导库,调用函数 System.out.println("请输入姓名"); String name = scanner.next();//从控制台上读取字符串 System.out.println("请输入年龄"); int age = scanner.nextInt(); System.out.println(name+":"+age); }}
循环语句
循环: 满足某种条件时,重复执行某些操作 while do while for 循环有四个部分 循环变量初始化 循环条件 循环体 循环变量迭代
if判断和switch...case循环
if(条件表达式 a>b && c>d ture / false ){ }
if(条件表达式){ }else{ }
if(条件表达式){ }else if (条件表达式){ }.......
if(条件表达式){ }else if{ }......else{ }
注意: if后面如果没有 { },只能控制与其相邻的那一行
package day3;
import java.util.Scanner;
public class SwitchDemo {
/* 表达式值 可以是 byte short int char String(字符串) 枚举 switch(表达式){ case 字面常量1 : 语句块1 [break]; case 字面常量2 : 语句块2 [break]; case 字面常量3 : 语句块3 [break]; .... default: 默认语句块 } */ public static void main(String[] args) { /* int w = 3; switch (w){ case 1: System.out.println("星期一"); break; case 2: System.out.println("星期二"); break; case 3: System.out.println("星期三"); break; default: System.out.println("输入不合法"); }*/ /*String w = "3"; switch (w){ case "1": System.out.println("星期一"); break; case "2": System.out.println("星期二"); break; case "3": System.out.println("星期三"); break; default: System.out.println("输入不合法"); }*/ /* 从控制台输入一个整数月份 打印该月份所属的季节,3,4,5春季 6,7,8夏季 9, 10, 11秋季 12 ,1,2 冬季 分别用if switch实现 */ Scanner scanner = new Scanner(System.in); int month = scanner.nextInt(); if(month==3||month==4||month==5){ System.out.println(month+"是春季"); }else if(month>=6&&month<=8){ System.out.println(month+"是夏季"); }else if(month>=9&&month<=11){ System.out.println(month+"是秋季"); }else if(month==12||month==1||month==2){ System.out.println(month+"是冬季"); }else{ System.out.println("输入有误"); } //switch实现 month = scanner.nextInt(); switch (month) { case 1: case 2: case 12 : System.out.println(month+"是冬季"); break; case 3: case 4: case 5 : System.out.println(month+"是春季"); break; case 6: case 7: case 8 : System.out.println(month+"是夏季"); break; case 9: case 10: case 11 : System.out.println(month+"是秋季"); break; default: System.out.println("输入有误"); } }}
while和do while循环
package day3;
import java.util.Scanner;
public class WhileDemo {
public static void main(String[] args) { /* int a = 1; while (a<=5){ System.out.println(a); //a++; //a=a+1; //a+=1; a+=2; }*/ /*int a = 5; while (a>=1){ System.out.println(a); a--; }*/ // while实现死循环 /*while(true){ System.out.println("111"); }*//* do{ }while(条件表达式) 先执行后判断,即使条件不成立 也会执行一次 */ /* int a = 8; do { System.out.println(a); a++; }while (a<=5);*/ /* 猜数字游戏 循环让用户输入一个数字, 当输入的值与x相同时,循环就可以结束 猜小了 提示小了 猜大了 提示大了 相等退出循环 使用break关键字退出循环 记录一下猜的次数 */ /*int x = 30; int count = 0; Scanner scanner = new Scanner(System.in); while (true){ count++; int g = scanner.nextInt(); if(g>x){ System.out.println("猜大了"); } if(g<x){ System.out.println("猜小了"); } if(g==x){ System.out.println("你经过了"+count+"次猜对了"); break; } }*/ //一直青蛙在一口11米深的井底向上爬,白天向上爬3米,晚上向下滑2米,总共需要几天可以爬出. int h = 0; //记录每天爬的高度 int sum = 0; while (true){ sum++; h+=3; if(h>=11){ System.out.println("经过了"+sum+"天爬出去了"); break; } h-=2; } }}
for循环
for(变量初始; 循环条件; 变量迭代){ }
break 用在Switch循环语句中, 结束整个循环语句
continue 用在循环语句中 结束当次循环
循环嵌套
public static void printStar(int row,int col){
int row =4;
int col= 5;
for(int i=0;i<=row;i++){//外层循环,控制行数
for(int j=1;j<= col ; j++){
//内层循环,控制列数
System.out.print("*");
//注意:在内层循环使用break 只结束内层循环, 不结束外层循环
// 如果想要结束外层循环 需要使用标签
}
System.out.println();
}
}
标签格式如下:
outloop:for( ){//结束整个循环
for( ){
循环体
break outloop;
}
}
函数(java中的方法)
就是写某个特定功能的代码,把他写在一组有名称的代码块{ }中,需要使用的时候,通过函数名调用(调用时,需要通过类名调用)
[访问权限修饰符] [修饰符] 返回值类型 函数名(参数列表) {
方法体
(如果有返回值) return 值;
}
package day4;
public class Demo3 {
public static void main(String[] args) {//Demo3是类名
Demo3.print99(5);//调用含参的99乘法表函数
System.out.println("------------------");
Demo3.print99();//调用不含参的00乘法表函数
Demo3.printStar(5,10);
}
public static void print99(int row){//含参的
for (int i =1;i<= row ; i++){
for(int j=1;j<=i ;j++){
System.out.print(j+"*"+i+"="+ i*j +" ");
}
System.out.println();//换行
}
}
public static void print99(){//不含参
for (int i =1;i<= 9 ; i++){
for(int j=1;j<=i ;j++){
System.out.print(j+"*"+i+"="+i*j+" ");
}
System.out.println();//换行
}
}
public static void printStar(int row,int col){//不含参
for(int i=0;i<=row;i++){//外层循环,控制行数
for(int j=1;j<= col ; j++){
System.out.print("*");
}
System.out.println();
}
}
}
注意: 在java中可以定义两个函数名一样的方法, 称为方法的重载,区分关键在于是否有参数.
void是没有返回值的类型, 可以不用写return;
如果定义了返回值的类型,就必须要写返回值
return作用
package day4;
public class Demo5 {
public static void main(String[] args) {
Demo5.print(98);
}
//void修饰的函数可以使用return,且后面不能添加任何值(return;)
//如果是return 0 ,相当于有返回值
public static void print(int score){
if(score<0 || score >100){
System.out.println("成绩不合法");
return;
}
if(score>= 90){
System.out.println("A");
return;
//return是终止,不return的话会出现问题,因为成绩也满足>=80,会同时打印AB
}
if (score>=80){
System.out.println("B");
}
}
}