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

java基础笔记(九)

来源:互联网 收集:自由互联 发布时间:2021-07-03
gistfile1.txt 十年饮冰 难凉热血复习:使用break语句可以终止switch语句或者循环的执行Break label:跳出label标记的本层循环Continue label:跳过label标记的本次循环,执行下一次循环Else if多重嵌套
gistfile1.txt
十年饮冰 难凉热血

复习:
使用break语句可以终止switch语句或者循环的执行
Break label:跳出label标记的本层循环
Continue label:跳过label标记的本次循环,执行下一次循环
Else if多重嵌套:
If()语句一
Else if()语句二
Else if()语句三
....
Else()语句N
哪个判断条件true了,就执行对应的语句,并且不再判断

Switch(表达式):该表达式必须为byte short char int类型之一

循环语句for(正常结束循环出口){
	Break;//非正常结束循环出口
}

while先判断,后执行;do-while先执行后判断
只要第一次不为假,while和do-while就执行相同次数
System.in.read();//从键盘缓冲区取出一个字符的ascii码,如果没有,则就会处于光标等待状态
键盘输入,回车,至少会给内存缓冲区加两个字符 ‘\r’ ‘\n’
													Ascii:  13	  10
我只担心一件事情,我取得的成就配不上我遭受的苦难。

模式匹配:求子串在父串中出现的位置
最朴素的算法:一个一个比,即使子串的第一个字符都匹配不上,也要傻乎乎的比完子串,算法如下:
Test://用1able标记
For(I=0;I<=16;I++){//I<父串长度-子串长度
	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++;//比较父串的下一个位置的字符
}
	List.add(i);//不再跳出循环,声明一个集合用来保存子串在父串的位置
}

第三部作业的解决方法之一如下:
先找出子串在父串中的所有位置,保存为一个集合Index
定义一个空字符串result,取到替换部分字符串的前面部分和替换部分拼起来
public  String  replaceString(String str, String substr, String restr) {
		//找出子串在父串中的所有位置,并用集合index保存
		List
 
   index = (ArrayList) StringMatch(str, substr);
		//输出有多少个位置
		System.out.println("索引长度为:" + index.size());
		//判断父串中是否有相同子串存在
		if (index.isEmpty()) {
			System.out.println("所选的字符串不在源字符串中!!");
			return null;
		}
		// 当index中存在数据才会执行下面的代码
		int length = index.size();//获取index的长度
		String result = "";//创建一个result字符串

		int j = 0, i = 0;//初始化两个标记
		for (i = 0; i < length; i++) {//当index里面还有值时
			if (index.get(i) == 0) {//如果index里对应下标为0,第一个位置
				result += restr;//那就在result开头加上更替字符串
			} else {
				// 取到替换部分字符串的前面部分和替换部分拼起来
				result+=str.substring(j, index.get(i))+restr;
			}
			// 将下标移到替换字符串完毕位置的下一个字符
			j = index.get(i) + substr.length();

		}
		if (j < str.length()) { // 当j大于length的时候就越界了
			result += str.substring(j, str.length());
		}
		return result;
	}

新姿势:

数组:存放数据的一个容器:第一,存放数据的类型必须一致;第二,是一段连续的存储空间,在创建的时候,就确定了固定的长度
顺序存储结构,方便查找,但是在元素间删除或者插入,要移动后面的所有数据元素,数组元素是从0开始的

数组的定义方式:类型[] 数组名;//推荐  
类型 数组名;//不推荐,c语言风格
基本类型的数组:
Int[] a;//数组变量的定义,在栈中开辟int[]类型的变量空间
a = new int[5];//在堆中创建一个int[]类型的对象:包含五个int类型的元素(相当于五个变量),初始值为0;把这个对象的地址给a
a是数组名,指向数组的首地址(int[]对象的第一个变量空间的地址)a[1]是元素名,先找到首元素地址a[0],再找到a[1]的位置(间接寻址)





初始化:定义的时候给它设值,只能一次
赋值:可以多次赋值

Int[] a={1,2,3,4,5};//静态设值,初始化
Int []num;//定义的时候不知道数组的长度
num = new int[]{1,2,3};//初始化设置的时候才确定数组元素的个数,再分配空间
Int[] b = new int[16];
b = num;//把num数组对象的地址给b了,他们就指向同一个对象的地址了,他们共享这个对象里的元素,

引用类型的数组:
String[] s;//在栈中定义一个String[]类型的变量,用来保存都是String类型元素的数组对象的地址
s = new String[5];//在堆中开辟一个String[]的数组对象,里面有五个String类型的元素,初始值为Null
String[] s={’one’,’two’};//初始化,String对象’one’在堆中创建,s[0]保存该对象的地址(数组元素是从0开始的)
String[]s;
S = new String[]{’one’,’two’};//String对象‘one’在方法区的常量池里创建;s[0]保存该对象的地址
Arg s = new String[0];//无意义的空数组对象

用数组进行排序:

冒泡排序BubbleSort:
排序思想:大的沉下去,小的浮上来,相邻比较,交换
Int[] a={12,43,23,56,8};//五个元素,n=5
算法:
For(I=0;I
  
   a[j+1]){ A[j]与a[j+1]交换; } } } 交换x,y:声明一个局部变量t t=x; x=y; y=t; 老师开始说的冒泡排序调用swap(x,y)方法,排序失败的原因是:传进数组中的两个元素是基本类型的,swap方法得到的是这两个元素的复制,在swap方法的工作空间里对这两个元素的复制的任何操作都不影响堆区a对象中的这两个元素本身 往方法里传基本类型参数是没用哒,要传引用类型喔 选择排序selectSort: 排序思想:先选第一个元素,然后让别的元素跟他比较,比他大不动,比他小置换,比较一次完毕,就确定了最小的,除去最小的,再对省下元素重复 算法: For(I=0;I
   
    a[j]){ A[i]与a[j]交换; } } } 插入排序insertSort: 排序思想:把一个数插入到一个有序数组中,让这个数组依然有序 先认为只有第一个元素的数组,是有序的,然后再插第二个元素,比第一个大就插后面,小就插前面;插入第三个元素的时候,跟第二个元素比较,比他大就插后面,比他小就再跟前一个元素比较。
   
  
 
网友评论