当前位置 : 主页 > 编程语言 > c++ >

java基础笔记(八)

来源:互联网 收集:自由互联 发布时间:2021-07-03
gistfile1.txt 十年饮冰 难凉热血复习:双目运算符可能会改变类型:byte+byte=int;只要除数为0,就会抛算数异常实型:除法:0/0.0=NaN;//非数值17.0/0 = Infinity;//无穷大17.0/0 = -Infinity;//无穷小取
gistfile1.txt
十年饮冰 难凉热血

复习:
双目运算符可能会改变类型:byte+byte=int;
只要除数为0,就会抛算数异常
实型:
除法:0/0.0=NaN;//非数值
	17.0/0 = Infinity;//无穷大
	17.0/0 = -Infinity;//无穷小
取余:17.6 mod 4 = 4.6;//正数取余小数不变
		17.6 mod 4.2 = 能算出结果;
		-17.6 mod 0=NaN;

==和equals
java对每个基本类型都创建了一个对应的封装类,这样它可以完全面向对象了
==   判断是否为同一对象
Equals  先判断是否为同一类型?如果是,再判断属性方法是否完全一致?如果是,那就返回true,不然就false

自动装箱:把基本类型自动封装为对象类型,把地址给n1;
Integer n1 = 130;
如果数值处于这个基本类型的取值范围内,就在方法区的常量池找是否有等于该值的对象,如果没有,就在常量池里面创建;如果超出范围,那就在堆区创建对象;

String str1;
Str1 = new String(“hello”);//给str1赋值
String str2 = new String(“hello”);//给str2初始化
可以多次赋值,但是只能初始化一次

Str1 = “world”;//在常量池里创建一个值为“world”的对象
Str 2= “world”;//把常量池里的这个对象的地址赋给str2,
Str1== str2 =true;

空指针异常:如果引用变量为null,该变量调用方法时,就会产生空指针异常

异或^:相同为假,不同为真
短路与&&:只要有一个假,那就不再执行后面的逻辑判断了
短路或||:只要有一个真,那就不再执行后面的逻辑判断了
非短路与&/或|:不管怎样,都会执行完


位运算只能用于基本类型的整型中 ,把整型转化为二进制
右移一位就除二;右移n位,就除以2^n
左移一位就乘二;
所有类型的移位都会转化为int;
>>>循环右移 

字符串连接符“+”:
只能用在String类型中;是双目运算,只要发现有一个变量是String类型,就会把运算中的其他变量转化为String类型(在常量池开创建一个新的String对象);
Double x = 9.987;
Double y = 1;
“”+x+y;//五个String对象
X+y+””;//三个String对象


新姿势:
1、选择结构:
If(逻辑判断){
逻辑判断为true就运行这段代码;
}else{
逻辑判断为false就运行这段代码;}  
多重嵌套:if(第一判断)else if(第二判断)else if(第三判断)else
那个判断为true就执行,不然就继续执行判断,直到最后的else

Switch  case:比较x和常量
Swtich(只能为byte,short,char,int类型变量x){
//不能为long,因为会损失精度,不能运行
	Case 常量1:
		执行语句;
		break(跳出循环);
	Case 常量2:
		执行语句;
		跳出循环;
	……
	Default:执行语句;
		结束
}

2、循环结构:
For(int I = 1 ;I<=10;I++){//当I>10时,循环正常结束
	Sum=sum+I;
	If(sum>5)
	Break;//跳出本次循环,非正常出口 }
For(;I<10;) 等于while(I<10)

同一循环条件,第一次不为假时,Do-while循环和while循环执行相同的次数
Do-while先执行,后判断;
while先判断,后执行;


Break:跳出本层循环;当前所在的循环体不再执行
Continue:提前结束本次循环,continue后面的代码都不执行;再开始下一次循环,从下一个值开始执行循环

outer/inner(label):语句标号,
Break inner;//跳出Inner标记的内层循环
Break outter;//跳出outter标记的外层循环

System.in.read();//从键盘缓冲区取出一个字符的ASCII码,如果没有任何数据,那光标就处于等待状态
Outter loop:
A  enter //产生了三个字符:’a’,’\r’,’\n’
						ASCII码:97,	13,	10

Outer:
for(int I=0;I<10;I++){//outer标记的外层循环
inner:
While(true){//inner标记的内层永真循环:
	Int k = system.in.read();//读取输入字符
	If(k==’b’) break inner;
//如果比较为true,则跳出inner标记的循环
	If(k==’q’) break outer;//跳出outer标记的循环,
}
}


模式匹配:子串在父串中首次出现的位置
重要性:常见的数据结构面试题,要把代码背下来
父串:look for a substring
子串:subs

朴素算法:一个个递推比较,最多比较(父串长度-子串长度)16次
Test://用1able标记
For(I=0;I<16;I++){//最多比较16次
	Flag=true;
//如果内层循环结束之后,flag还是true,那就匹配成功
j=i;//用一个j来标记父串比较字符的位置
	For(k=0;k<4;k++){//比较对应字符是否相等
		If(searchline.charAt(j)!=substring.charAt(k)){
			Flag=false;
}
J++;//比较父串的下一个位置的字符
}
If(flag==true){
	System.out.println(i);//输出子串在父串中的位置
Break test;//跳出test标记的循环
}
}

优化的朴素算法:
test://用1abel标记
For(I=0;I<16;I++){//最多比较16次
j=i;//用一个j来标记父串比较字符的位置
	For(k=0;k<4;k++){//比较对应字符是否相等
		If(searchline.charAt(j)!=substring.charAt(k)){
			Continue test;//一旦有一个字符不匹配,那就跳过test标记的本次循环,进行下一次循环
}
J++;//比较父串的下一个位置的字符
}
	System.out.println(i);//输出子串在父串中的位置
break test;//跳出test标记的循环
}

写一个模式匹配的方法,
1、在写一个类,在类中的主方法中调用这个方法
2、找到子串在父串中出现的所有位置,提示:去掉break,用ArrayList保存
3、找到子串,然后替换掉子串

不问过往 直奔前程
网友评论