1.关于类型的转换
class Demo1
{
public static void main(String[] args)
{
byte b = 3;
b = 2+b;
System.out.println(b);
}
}
结果:编译不能通过,可能损失精度
分析原因:因为byte在内存占2个字节,整数2在内存中占四个字节,当2+b在运算过程会把b自动提升到4个字节进行运算,运算完毕会把占四个字节的5赋予占两个字节的b,这样做就可能损失精度。
解决途径:(1)把 b = 2+b;改为: b = byte(2+b);这叫强制转换,即把占四个字节的数int强制转换成byte
(2)把 b = 2+b;改为:b+=2,因为b+=2在内存中完成了自动强制转换功能
延伸:class Demo3
{
public static void main(String[] args)
{
char a = 'b';
System.out.println(5+a);
}
}//输出结果:103
2.最有效率的方式算出2乘以8?
因为将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,而位运算cpu直接支持的,
效率最高,所以,2乘以8等於几的最效率的方法是2 << 3。
3.对两个整数变量的值进行互换:
(1)运用第三方变量
int n = 3,m = 8;
int temp;
temp = n;
n = m;
m = temp;
(2)不用第三方变量。
n = n + m;//如果n和m的值非常大,容易超出int范围。
m = n - m;
n = n - m;
(3)利用一个数异或另一个数两次得到的是原数
n = n ^ m;
m = n ^ m;//(n^m)^m;
n = n ^ m;//n ^ (n ^ m
4.if else 结构可以 简写成三元运算符格式: 变量 = (条件表达式)?表达式1:表达式2;
三元运算符:
优点:可以简化if else代码。
弊端:因为是一个运算符,所以运算完必须要有一个结果。
5.if和switch语句区别:
如果判断的具体数值不多,而是符合byte short int char这四种类型。
虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。
其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。
6.while和do while的区别:
while:先判断条件,只有条件满足才执行循环体。
do while: 先执行循环体,在判断条件,条件满足,再继续执行循环体。
do while:无论条件是否满足,循环体至少执行一次。
7.(1)什么时候使用循环结构(for和while)?
当要对某些语句执行很多次时,就使用循环结构。
(2)变量有自己的作用域。对于for来讲:如果将用于控制循环的增量定义在for语句中。那么该变量只在for语句内有效。
for语句执行完毕。该变量在内存中被释放。
(3)for和while可以进行互换。如果需要定义循环增量。用for更为合适。
(4)两种最简单的无限循环的表达式:for(;;){}和while(true){}
8.(1)需求:求1到200被8整除的个数
思路:
1,先对1~200进行循环(遍历)通过循环的形式。
2,在遍历的过程中,定义条件。只对8的倍数进行操作。
3,因为8的倍数不确定,只要符合条件,就通过一个变量来记录住这个变化的次数。
步骤:
1,定义循环语句,选择for语句。
2,在循环中定义判断。只要是8的倍数即可。使用if语句。条件:8的倍数 x%8==0;
3,定义变量,该变量随着8的倍数的出现而自增。
class Demo
{
public static void main(String[] args)
{
int count = 0;//定义一个计数器变量
for (int x=1;x < 200 ;x++ )//for循环遍历1到200
{
if(x%8==0)//是否满足被8整除
count++;//满足就计数一次
}
System.out.println("count=="+count);//输出满足计数的总次数
}
}
总结:计数器思想。
通过一个变量记录住数据的状态变化,也可通过循环完成。
(2)获取1~10的和,并打印。
思路:/*0+1
1+2
3+3
6+4 */
class ForTest2
{
public static void main(String[] args)
{
//1,定义变量用于存储不断变化的和。
int sum = 0;
//2,定义变量,记录住不断变化的被加的数。
int x = 1;
//3,定义循环,重复加法的过程。
while(x<=10)
{
sum = sum + x;
x++;
}
System.out.println("sum="+sum);
//用for来体现。
int sum = 0;
for(int x=0; x<=10; x++)
{
sum += x;
}
System.out.println("for sum = "+sum);
}
}
循环注意:一定要明确哪些语句需要参与循环,哪些不需要。
累加思想:原理:通过变量记录住每次变化的结果。
通过循环的形式。进行累加动作。
9.for循环嵌套方式
不是规律的规律:
尖朝上,可以改变条件。让条件随着外循环变化。
尖朝下,可以初始化值,让初始化随着外循环变化。
(1)九九乘法表:
class JiujiuDemo
{
public static void main(String[] args)
{
for (int x=1;x<=9 ; x++ )//外循环控制行数
{
for (int y=1;y<=x ;y++ )//内循环控制列数
{
System.out.print(y+"*"+x+"="+y*x+"\t");
}
System.out.println();
}
}
}
(2)金字塔
----*
---* *
--* * *
-* * * *
* * * * * *
class jinzita
{
public static void main(String[] args)
{
for (int x=0; x<5 ;x++ )
{
for(int y=x+1; y<5 ; y++)
{
System.out.print(" ");
}
for(int z=0; z<=x ; z++)
{
System.out.print("* ");
}
System.out.println();
}
}
}
10.break和continue区别:
continue:只能作用于循环结构。继续循环。特点:结束本次循环,继续下一次循环。
break:作用于switch和循环结构,结束循环。
注意:1,break和continue语句作用的范围。
2,break和continue单独存在时,下面不可以有任何语句。因为都执行不到。
自我总结:以前看视频时懂了,但过一阵又搞忘了,对知识点不熟悉,现在又重新总结了一下,
以后不清楚可以回来查技术博客,可以巩固学过的知识,所以必须坚持学过一节总结一节的知识!