java基础知识02
1.导包 import java.util.random 2.创建Random类型的引用 Random ran=new Random(); 3.使用功能 ran.nextInt()随机产生int范围内的整数 ran.nextInt(整数n) 随机[0,n]整数 ran.nextDouble()[0.0,1.0)随机产生double范围的小数
公式总结: 随机整数: [0,n] ran.nextInt(整数n) [0,n] ran.nextInt(n+1) [min,max) ran.nextInt(max-min)+min ran.nextInt(max)->[0,max) ran.nextInt(max)+min->[min,max+min) ran.nextInt(max-min)+min->[0,max-min)+min -->[min,max) [min,max] ran.nextInt(max-min+1)+min 注意:伪随机数
import java.util.Random;
public class Class012_Random{
//程序的入口
public static void main(String[] args){
//1.导包
//2.创建Random类型的引用
Random ran = new Random();
//3.使用功能
int num = ran.nextInt();
System.out.println(num);
2.运算符
算术运算符 + - * / % ++ --
赋值运算符 = 比较运算符|关系 > < >= <= == != 逻辑运算符& | ! ^ && || 位运算符 条件运算符 ? :
操作数:运算符左右两边的数据 表达式:运算符连接操作数作数整体称为表达式 语句:语句以;结束
一元运算符|单目运算符:操作数只有一个 +-(正负号) 二元运算符|双目运算符:操作数只有两个 + - * / 三元运算符|三目运算符:操作数有三个 条件运算符
2.1算数运算符
+ - * / % ++ -- +: 1正号 2加法运算 3字符串的连接符 当+左右两边一旦出现""字符串,+就作为字符串连接符,把左右两边的数据拼接成为一个字符串 -: 1负号 2减法运算
%取余数|取余|模以 当第一个操作数<第二个操作数,结构为第一个操作数
public class Class013_Operator{
//程序的入口
public static void main(String[] args){
int i = +3;
System.out.println(i);
System.out.println("i = "+i); //"i = 3"
System.out.println("hello"+'a'+1); //"helloa"+1="helloa1"
System.out.println('a'+1+"hello"); //98+"hello" = "98hello"
System.out.println("hello"+true); //"hellotrue"
}
}
2.2一元运算符
++ 自增 : 自身+1 a++==> a=a+1
--自减 : 自身-1 a-- ==> a=a-1
规律 :
只操作自己 : ++放在操作数的前面后面都是自身+1 --放在操作数的前面后面都是自身-1
影响其他结果 : (赋值,表达式,输出){前算后换}
++--放在操作数前面,先+1|-1,再去运算 ++--放在操作数后面,先去运算,再进行+1|-1
public class Class014_Operator{
//main方法
public static void main(String[] args){
System.out.println("方法");
int i = 1;
//只操作自己
System.out.println(i);
i++;
++i;
System.out.println(i); //3
//影响其他结果
int j = i++;
System.out.println(i); //4
System.out.println(j); //3
j = --i;
System.out.println(i); //3
System.out.println(j); //3
System.out.println(i++); //3
System.out.println(i); //4
j = i++ + 2;
System.out.println(i); //5
System.out.println(j); //6
j = i++ + ++i + i++ + i++ + ++i;
System.out.println(i); //10
System.out.println(j); //37
//练习
int k=20;
j=8;
int totle = k++ + j-- + --j + ++k + k++ + j++ + k-- + --k + j++;
System.out.println("k="+k+",j="+j+",totle="+totle); //
}
}
2.3赋值运算符
基础赋值运算符 =是java中唯一一个自右向左运算的符号 优先级最低
扩展赋值运算符(算数运算符+基础 赋值运算符) += a=a+10;==>a+=10; -= *= /= %=
优点: 执行效率快 自动做强制类型转换
注意:编译器件编译器会自动把可以实现的位置优先成为扩展赋值运算符
public class Class015_Operator{
//main方法
public static void main(String[] args){
int zhang = 98;
int wang = 100;
int result = 0;
result+=zhang;//result = result+zhang;
result+=wang;//result = result+wang;
short s = 100;
//s = s + 1;
//s++;
s+=1;
System.out.println(s);
}
}
2.4比较运算符|关系运算符
> < >= <= byte,short,int,long,float,double,char
== != 基本,引用
结果都为boolean类型
public class Class016_Operator{
//main方法
public static void main(String[] args){
int a = 1;
boolean flag = a>0;
System.out.println(flag);
String s1 = "zhangsan";
String s2 = "zhangsan";
System.out.println(s1==s2);
System.out.println(s1!=s2);
//练习 对下面代码进行注释
double d=10/3;
a=10/3;
System.out.println(a==d); //true
System.out.println(a); //3.0
System.out.println(d); //3.0
d=10/3.0;
a=10/3;
System.out.println(a==d); //false
System.out.println(a); //3.0
System.out.println(d); //3.33333333333333
System.out.println("hello"!="hello"); //false
}
}
2.5逻辑运算符
& 与 两个都为真true,结果才为true,一个为false就是false
| 或 一个为true就是true,两个都为false才是false
!非 取反 !true-->false !false-->true
^异或 相同为false,不同为true
短路:如果左边的操作数的值能够决定最终表达式的结果,第二个操作数不会执行 && : 两个都为真true,结果才为true,一个为false就是false || : 一个为true就是true,两个都为false才是false
注意: 操作数必须boolean,值为boolean的表达式 建议使用短路运算符
blic class Class017_Operator{
//main方法
public static void main(String[] args){
System.out.println("-----------------&-----------------");
System.out.println(true&true); //true
System.out.println(true&false); //false
System.out.println(false&false); //false
System.out.println(false&true); //false
System.out.println("-----------------|---------------");
System.out.println(true|true); //true
System.out.println(true|false); //true
System.out.println(false|false); //false
System.out.println(false|true); //true
System.out.println("-----------------!---------------");
System.out.println(!true); //false
System.out.println(!false); //true
System.out.println("-----------------^---------------");
System.out.println(true^true); //false
System.out.println(true^false); //true
System.out.println(false^false); //false
System.out.println(false^true); //true
System.out.println("-----------------&&`-----------------");
System.out.println(true&&true); //true
System.out.println(true&&false); //false
System.out.println(false&&false); //false
System.out.println(false&&true); //false
System.out.println("-----------------& 与 &&-----------------");
//System.out.println(false&5/0==0); // java.lang.ArithmeticException: / by zero
System.out.println(false&&5/0==0); //false
System.out.println("=============练习=================");
int a=10;
int b=9;
System.out.println(a>b & ++b>a); //false
System.out.println("a="+a+",b="+b); //a=10,b=10
System.out.println(a<b | b<a); //false
System.out.println(!(a>b ^ a>9)); //false
System.out.println(10>5 & 10/0==0); //报错
System.out.println(10<5 && 10/0==0); //false
2.6条件运算符
条件表达式?值1:值2;
条件表达式:值为boolean类型的表达式
执行流程: 1.计算条件表达式,得到boolean结果 2.为false,结果为值2
public class Class018_Operator{
//main方法
public static void main(String[] args){
String s = false ? "值1" : "值2";
System.out.println(s);
int a = 5;
String s2 = a>0? "a>0" : "a<=0";
boolean flag = a>0? true : false;
System.out.println(flag);
System.out.println(a>0);
int b = 7;
//求2个数最大的值
int max = a>b?a:b;
System.out.println(max);
//求2个数值最大的变量
String name = a>b? "a" : "b";
//判断a是否为偶数
System.out.println(a%2==0?"偶数":"奇数");
//求3个变量中最大的值、
max= 0;
int c = 14;
//1)
max = a > b ? a : b;
max = max>c ? max : c;
System.out.println(max);
max= 0;
//2)
max = a>b && a>c ? a : (b>c ? b : c);
System.out.println(max);
}
}
2.7位运算符
把操作数转为二进制,然后根据运算符的规则运算,最终得到的结果转为十进制
&:同一位的两个数,两个都为1才是1,一个为0就是0 | :同一位的两个数,一个都为1才是1,两个为0就是0 ^ : 同一位的两个数,相同为0不同为1
注意:以上三个左右两边为boolean类型数据就作为逻辑运算符存在
位运算符
右移==>8>>2 把第一个操作数转为二进制,向右移动第二个操作数个位数,移出的位数直接忽略不计,剩余的转为十进制
左移==>8<<2 把第一个操作数转为二进制,向左移动第二个操作数个位数,空位补0,结果转为十进制
总结规律: 右移:/2的次方 8>>3==>8/2^3 左移:* 2的次方 8<<3==>8 * 2^3
注意:建议使用位移运算符代替乘除,效率高
System.out.println(3&2); //2
System.out.println(3|2); //3
System.out.println(3^2); //1
System.out.println(8>>2); //2
System.out.println(8<<1); //16
int a = 5;
int b = 10;
boolean x =a < b ?( a++ * 2 > b || a > b ):( a < b);
System.out.println(x); //false
System.out.println(a); //6
System.out.println(b); //10
System.out.println(false && true || true); //true
System.out.println(true || true && false); //true
2.8运算优先级
运算优先级: 单目算数位关系,逻辑三目后赋值。
public class Class020_Operator{
//main方法
public static void main(String[] args){
int a = 5;
int b = 10;
boolean x = a < b ? a++ * 2 > b || a > b : a < b;
System.out.println(x); //F
System.out.println(a); //6
System.out.println(b); //10
//&&比||优先级高
System.out.println(false && true || true); //T
System.out.println(true || true && false); //T
//赋值运算符 : 自右向左执行
//x=y=z=10;
//条件运算符具有自右向左的结合性
boolean w = true?true:false?false:false;
boolean y = true?true:(false?false:false); //自由向左结合 T
boolean z = (true?true:false)?false:false; //自左向右结合 F
System.out.println(w);
System.out.println(y);
System.out.println(z);
}
}
必备番外:流程控制语句
顺序结构:默认 从上到下从左到右 选择结构: 满足条件执行相应的代码 if..else switch 循环结构: 重复执行一段代码(控制执行次数) for while do..while
if 单选择|单分支: if(boolean表达式){ 语句体 } 执行流程: 1.boolean表达式,得到boolean结果 2.如果结果为true,执行{}中的语句体 3.如果结果为false,直接跳过if结构
双选择|双分支: if(boolean表达式){ 语句体1; }else{ 语句体2; } 执行流程: 1.boolean表达式,得到boolean结果 2.如果接过为true,执行{}中的语句体1 3.如果结果为false,执行else后的语句体2 多选择|多分支: if(boolean表达式){ 语句体1; }else if (boolean表达式2){ 语句体2; }else if(boolean表达式3){ 语句体3; }········ else{ 语句体n; } 执行流程: 1.boolean表达式1,得到boolean结果,如果结果为true,执行{}中的语句体1 2.如果结果为false,执行boolean表达式2,如果结果为true,执行{}中的语句体2 3.如果结果为false,执行boolean表达式2,如果结果为true,执行{}中的语句体3 4.如果以上都不满足,执行else后的语句体n;\
注意:一个if..else为一个结果,只能执行一个语句体。如果{}中的语句体只有一句,前后的{}可以省略
if语句与条件运算符区别: 1.条件 运算符肯定有结果,但是if结果不一定能有结果 2.条件运算符结果智能为值1|值2,if语句体可以存在多条指定语句 3.if结果功能更加强大,但是条件运算符符结构简单,效率高推荐简单的使用条件运算符,复杂的使用if
public class Class021_If{
public static void main(String[] args){
System.out.println("if之前");
//单选泽
if(false){
System.out.println("满足条件");
}
System.out.println("if之后");
//双选泽
int i=1;
if(i>0){
System.out.println("i>0");
}else{
if(i==0){
System.out.println("i=0");
}else{
System.out.println("i<0");
}
}
//多选泽
if(i>0)
System.out.println("i>0");
else if(i==0)
System.out.println("i=0");
else
System.out.println("i<0");
}
}
if语句小练习
public class Class022_Practice{
public static void main(String[] args){
System.out.println("--------------一----------------");
/*
一.两个随机数 判断两个数是否相等
*/
Random random=new Random;
int a=random.nextInt();
int b=random.nextInt();
System.out.println(a==b);
System.out.println("--------------二----------------");
/*
二.获取两个随机数中的最大 要求:分别用if语句,用三目运算符实现
*/
if(a>b){
System.out.println("max="+a);
}else{
System.out.println("max="+b);
}
String s1=a>b?a:b;
System.out.println("--------------三----------------");
/*
三.获取三个随机数中的最大值 要求:使用if语句嵌套
*/
int c=random.nextInt();
if(a>b&&a>c){
System.out.println("max="+a);
}else if(b>c){
System.out.println("max="+b);
}else{
System.out.println("max="+c);
}
System.out.println("--------------四----------------");
/*
四.键盘输入小明的一门成绩,显示该成绩对应的奖励
100 爸爸给你买个iphone18promax x=100
[90,100) 爸爸给你买个iphone18 x>=90 & x<100
[60,90) 别灰心,爸爸给你买各种学习资料 x>=60 & x<90
(0,60) 买学习资料,上补习班,各种爱的教育,如果下次还不及格,小心皮鞭沾凉水 x>0 & x<60
0 我看你是快了!!!! x=0
注意:java中不支持这种格式90<=x<=100
要写成: x>=90 & x<100
*/
Scanner sc =new Scanner(System.in);
//获取用户数据
int d1=nextInt();
if(d1==100){
System.out.println("爸爸给你买个iphone18promax")
}else if(d1>=9&&d1<100){
System.out.println("爸爸给你买个iphone18");
}else if(d1>=60&&d1<90){
System.out.println("别灰心,爸爸给你买各种学习资料");
}else if(d1>0&&d1<60){
System.out.println("买学习资料,上补习班,各种爱的教育,如果下次还不及格,小心皮鞭沾凉水");
}else if(d1==0){
System.out.println("我看你是快了!!!!");
}
if 区间判断 定值判断
switch定值判断
语法:
switch(条件){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
.....
default:
语句体n;
break;
}
条件:变量,表达式 数据类型:byte short int char 枚举(jdk1.5) String(jdk1.7) case: case跟定值,要与条件的结果判断,条件的结果与case后的定值 相等就指定对应的语句体 break:结束当前switch语句,防止case穿透 default:相当于else,可以定义可以不定义 位置 可以定义在switch语句中的任意位置
public class Class023_Switch{
public static void main(String[] args){
String flag = "紫灯";
switch(flag){
case "绿灯":
System.out.println("绿灯行..");
break;
case "红灯":
System.out.println("红灯停..");
break;
case "黄灯":
System.out.println("黄灯等一等..");
break;
default :
System.out.println("别捣乱..");
break;
}
/*
//case穿透
switch(flag){
case "绿灯":
System.out.println("绿灯行..");
case "红灯":
System.out.println("红灯停..");
case "黄灯":
System.out.println("黄灯等一等..");
break;
default :
System.out.println("别捣乱..");
}
*/
//测试char
char ch = 'a';
switch(ch){
case 'a':
System.out.println("aaa..");
break;
case 'b':
System.out.println("bbb..");
break;
}
//思考 :
boolean b = false;
//通过switch语句对b进行判断
String s=String.valueOf(b);//第一个方法
String s2=""+b;//第二个方法
String s3=b?"true":"false";//第三个方法(三目运算符)
String s4=Boolean.toString(b);//第四个方法
switch(s){
case"false":
System.out.println("false");
break;
case"true":
System.out.println("true");
break;
default:
System.out.println("搞什么飞机啊!!");
