循环语句的理解
1. do while 语句和while语句的区别:
while语句在进入循环体之前要先判断条件是否成立,如果成立的话则进入循环体。
而do…while语句则是先执行循环体,然后再判断条件是否成立,如果成立的话则继续循环体,如果不成立则跳出循环;
也就是说do-while循环至少要执行一次循环语句。
2.break和continue的区别:
break和continue都是用来控制循环结构的,主要是停止循环。
1.break
有时候我们想在某种条件出现的时候终止循环而不是等到循环条件为false才终止。
这是我们可以使用break来完成。break用于完全结束一个循环,跳出循环体执行循环后面的语句。
2.continue
continue和break有点类似,区别在于continue只是终止本次循环,接着还执行后面的循环,break则完全终止循环。
可以理解为continue是跳过当次循环,执行下一次循环。
数组
建立一个一维数组有很多种写法:
-
int[] array1 = {1,2,3,4,5};
-
int[] array2 = new int[5];
-
int[] array3 = new int[] {1,2,3,4,5};
数组引用之间的赋值
public static void main(String[] args) {
int[] array = {1,2,3,4,5};
int[] array2 = array;
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(array2));
array[0] = 6;
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(array2));
}
输出结果为:
我们都知道通过array[0]=6; 修改的是array的中0下标的元素的值,但是
第二次输出的array2的0元素的值也为 6;
因为 int[] array2 = array; 这个赋值语句,其实是操作数栈中array2指向了堆栈中的array的地址,修改array中的元素的值,但是其地址没有变化,在输出array2的时候,array2还是先去找那个地址,然后再去访问地址所对应的数据,所以修改了array的值,array2的值也同样跟着改变。
练习题:
1、实现二分查找算法:有序的数组
public static void main(String[] args) {
int[] array=new int[]{1,2,3,4,5,6,7,8,9,10};
System.out.println(binnary(array,6));
}
public static int binnary(int[] array,int key){
int a=0;
int b=array.length-1;
int middie=(a+b)/2;
if(key<array[a]||key>array[b]) {
return -1;
}
while(a<=b){
if(array[middie]==key){
return middie;
}else{
if(array[middie]>key){
b=middie-1;
}
else{
a=middie+1;
}
}
}
return -1;
}
2.求一个数组的连续子数组的最大和(最好输出最大的子数组)?
public static void main(String[] args) {
int[] array=new int[]{-1,2,5,-8,4,10};
maxArray(array);
}
public static void maxArray(int[] array){
int sum=array[0];
int max=array[0];
int s1=0;
int start=0;
int end=0;
for(int i=1;i<array.length;i++) {
if (sum >0) {
sum = sum + array[i];
} else {
sum = array[i];
s1 = i;
}
if (sum >= max) {
max = sum;
start = s1;
end = i;
}
}
int[] array2=new int[end-start+1];
for(int i=start;i<=end;i++){
array2[i-start]=array[i];
}
System.out.println(max);
System.out.println(Arrays.toString(array2));
}
3.交换两个数?
public static void main(String[] args) {
int[] a={20};
int[] b={10};
exchange(a,b);
System.out.println(a[0]);
System.out.println(b[0]);
}
public static void exchange(int[] a,int[] b) {
int c=0;
c=a[0];
a[0]=b[0];
b[0]=c;
}
4.逆置数组?
public static void main(String[] args) {
int[] array=new int[]{1,2,3,4,5,6} ;
change(array);
}
public static void change(int[] array) {
int a=0,b=array.length-1;
while (a<b){
int c=0;
c=array[a];
array[a]=array[b];
array[b]=c;
a++;
b--;
}
System.out.println(Arrays.toString(array));
}