刷了几节尚硅谷的基础,本节主要是讲解变量和运算符,细节很多,有一点值得一提,在判断语句中进行赋值时,只能进行boolean类型的赋值,且仅当赋值为true时满足条件判断,执行判断后的语句。在下面的代码中也有所体现。
/*
算数运算符:
+ - + - * / ++(前)++(后) --(前)--(后) %
*/
class AriTest
{
public static void main(String[] args)
{
//除号
int num1=12;
int num2=5;
int result=num1/num2;//result=2
System.out.println(result);
int result2=num1/num2*num2;
System.out.println(result2);//result=10,顺序执行
double result3=num1/num2;//result3=2.0
System.out.println(result3);
double result4=num1/(num2+0.0);//result4=2.4 括号里变成了double
System.out.println(result4);
double result5=(double)num1/num2;//result5=2.4 num1强转为double
System.out.println(result5);
//取余运算
//结果的符合和被模数的符号相同
//开发中经常利用取模运算来判断是否能被除尽的情况
int m1=12;
int n1=5;
System.out.println("m1%n1="+m1 % n1); //2
int m2=-12;
int n2=5;
System.out.println("m2%n2="+m2 % n2); //-2
int m3=12;
int n3=-5;
System.out.println("m3%n3="+m3 % n3); //2
int m4=-12;
int n4=-5;
System.out.println("m4%n4="+m4 % n4); //-2
//++前 先自增1再运算
//++后 先运算后自增1
int a1=10;
int b1=++a1;
int a2=10;
int b2=a2++;
System.out.println("a1="+ a1 + ",b1="+ b1);//a1=11 b1=11
System.out.println("a2="+ a2 + ",b2="+ b2);//a2=11 b2=10
//注:
short s1=10;
//s1=s1+1;编译失败
//s1=short(s1+1); 编译成功
s1++;//自增1不会改变本身的数据类型
System.out.println(s1);
byte b3=127;
b3++;
System.out.println("b3="+b3);//-128
//--前 先自减1再运算
//--后 先运算后自减1
}
}
/*
题目练习:任意给出一个三位整数,打印出个位数、十位数、百位数
*/
class ExeTest
{
public static void main(String[] args)
{
int num=187;
int bai=num / 100;
int shi=num % 100 / 10;
int ge=num % 10;
System.out.println("个位数为:"+ge);
System.out.println("十位数为:"+shi);
System.out.println("百位数为:"+bai);
//Exercise
int n=10;
n+=(n++)+(++n);//n =n+(n++)+(++n)
// 10 10 12 结果为32,左侧的计算从左到右
System.out.println(n);
}
}
/*
赋值运算符
+= -= *= /= %=
此类运算符不改变变量本身数据类型
*/
class SetValue
{
public static void main(String[] args)
{
//连续赋值
int i1,i2;
i1=i2=2;
int i3=10,i4=10;
int num=10;
num += 2;//num=num+2
System.out.println(num);//12
short s1=10;
//s1=s1+1;编译不通过
s1+=1;//编译通过,不改变变量本身数据类型
System.out.println(s1);
}
}
/*
比较运算符
== != > < >= <= instanceof
结论:比较运算符的结果为boolean型
*/
class CompareTest
{
public static void main(String[] args)
{
int i=10;
int j=20;
System.out.println(i==j);//false
}
}
/*
逻辑运算符
& &&(短路与) | || ! ^
&&(短路与):
异或 ^
a^b 不同为真(true) ,相同为假(false)
1.逻辑运算符操作的都是boolean类型的变量
2.
*/
class LogicTest
{
public static void main(String[] args)
{
//区分 & 与&& |与||结论相同 不过是在符号左边为false时都执行右边,左边为true时,|执行右边,||不再执行右边(短路或)
//相同点:1.&和&&的逻辑运算结果是相同的
// 2.当符号左边为true时都会执行右侧的运算
//不同点:当符号左边为false时,&继续执行符号右边的运算,&&不再执行符号右侧的运算(短路与)
//开发中优先使用短路与和短路或
boolean b1=true;
b1=false;
int num1=10;
if(b1 & (num1++>0))
{
System.out.println("答案正确!");
}
else
{
System.out.println("答案错误!");
}
System.out.println("num1="+num1);
boolean b2=true;
b2=false;
int num2=10;
if(b2 && (num2++>0))
{
System.out.println("答案正确!");
}
else
{
System.out.println("答案错误!");
}
System.out.println("num2="+num2);
}
}
//小题目
class Test01
{
public static void main(String[] args)
{
boolean x=true;
boolean y=false;
short z=42;
if(y==true)
if((z++==42)&&(y=true))
z++;
if((x=false)||(++z==45))
z++;
System.out.println("z="+z);
}
}
/*
在条件判断语句中仅可对变量赋boolean类型的值
仅当赋值为True时才会执行判断语句中的命令
*/
class TestAssign
{
public static void main(String[] args)
{ boolean x=false;
boolean y=true;
int z=12;
if(x=true)
System.out.println("条件在true赋值下执行条件下面的语句");//只显示该句
if(y=false)
System.out.println("条件在任何赋值下执行条件下面的语句");
//if(z=13) 无法通过编译
// System.out.println("条件在整型赋值下执行条件下面的语句");
}
}
/*
位运算符
<<左移 每向左移一位,相当于十进制的数乘2,右侧用0补齐
>>右移 每向右移一位,相当于十进制的数除2,左侧最高位是谁就用谁补齐
左移右移不能超过一定的限度
>>>无符号右移 不管最高位是几都拿0补
&与 |或 ^异或 ~取反
操作数据类型为整型
Q:最高效计算2*8 2<<3 或8<<1
*/
class BitTest
{
public static void main(String[] args)
{
int i=21;
System.out.println("i<<2="+(i<<2));
int j=12;
System.out.println("i & j="+(i & j));
System.out.println("i | j="+(i | j));
System.out.println("i ^ j="+(i ^ j));
//Practice:交换两个变量的值
int num1=10;
int num2=20;
System.out.println("num1="+num1+"num2="+num2);
//方法一:定义临时变量
int temp=num1;
num1=num2;
num2=temp;
System.out.println("num1="+num1+"num2="+num2);
//方法二:不用定义临时变量,但有局限性只能进行数值类型的数据的运算且相加有超出范围的风险
num1=num1+num2;
num2=num1-num2;
num1=num1-num2;
System.out.println("num1="+num1+"num2="+num2);
//方式三:使用位运算符
//(m^n)^n=m (m^n)^m=n
num1=num1^num2;
num2=num1^num2;
num1=num1^num2;
System.out.println("num1="+num1+"num2="+num2);
}
}
/*
三元运算符
(条件表达式)?表达式1:表达式2
说明:条件表达式结果为boolean类型
如果条件表达式结果为true,执行表达式1,
如果表达式结果为false,执行表达式2。
凡是可以用三元运算符的地方都可以用if-else去代替
但if-else不一定可以转换为三元运算符
*/
class SanYuan
{
public static void main(String[] args)
{
//获取两个整数的较大值
int m=23;
int n=34;
int max=(m>n)?m:n;//m、n均为int型 max可以用int类型承接
System.out.println(max);
double max1=(m>n)?1.0:2;//类型不同时,用可以统一为一个类型的数据去承接
//获取三个数的最大值
int n1=23;
int n2=34;
int n3=-23;
int max11=(n1>n2)?n1:n2;
int max22=(max1>n3)?max11:n3;
System.out.println("三个数中的最大值为:"+max22);
}
}
基础部分看起来确实没什么难度,不过刷一遍视频确实能更注意一些小细节,冲冲冲!