gistfile1.txt 十年饮冰 难凉热血复习:双目运算符可能会改变类型:byte+byte=int;只要除数为0,就会抛算数异常实型:除法:0/0.0=NaN;//非数值17.0/0 = Infinity;//无穷大17.0/0 = -Infinity;//无穷小取
十年饮冰 难凉热血 复习: 双目运算符可能会改变类型: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、找到子串,然后替换掉子串 不问过往 直奔前程