java基础篇之4----------中短流程控制语句、数组的内存分析

上期作业:
1: 用二分法求一已排序数组中的指定数值

public static int binary(int[] a, int key) { // 传入一个数组和一个要查找的数
        int low = 0;     //定义一个头变量
        int high = a.length - 1; // 定义一个尾变量
        int mid = (low + high) / 2;// 定义一个中间变量
        int i;// 用于接收目标值得下标
        if (key < a[mid]) {   // 如果要找的值在前半部分
            while (key != a[low]) { //遍历前半部分数组
                low++;
                if (low == mid) {
                    return -1;
                }
            }
            return low;
        } else {
            while (key != a[mid]) {   // 遍历后半数组;
                mid++;
                if (mid == a.length) {
                    return -1;
                }
            }
            return mid;
        }
    }

2:求一个数组的连续子数组最大和,并输出区间下标

public static void maxSum(int[] a) {
        //求一个数组的连续子数组最大和,并输出区间下标
        int maxSum = 0;//  声明一个变量储存最大值
        int nowSum ;//声明一个变量储存当前的和
        int hand=0;
        int foot=0;//定义最大和子数组的头尾下标
        for (int i = 0; i < a.length; i++) {  //此循环子数组
            for (int j = i; j < a.length; j++) {
                nowSum = 0; // 每一次就子数组的和之前必须将nowSum中储存的值清零;
                for (int k = i; k <=j; k++) {
                    nowSum += a[k];//计算每个子数组的和;
                    if (nowSum>maxSum) {
                        maxSum=nowSum; //如果当前计算的和大于最大值,则将当前计算的和赋值给最大值
                        hand=i;
                        foot=j;
                    }
                }
            }
        }
        System.out.println("最大数组和:"+maxSum+"**********子数组区间"+hand +"~"+ foot);
    }

3:封装一个方法交换两个变量的值
此方法不能实现。因为虽然把值传进去了,但是只是方法内部的变量的值改变了,方法内部变量的做运动范围只是方法内部,这个问题考到变量作用范围的问题;
4: 倒置数组:

public static int[] convetArray( int[] a) {
        int [] b=new int[a.length];
        for (int i=0,j=a.length-1;i<a.length;i++,j--) {
            b[i]=a[j];
        }
        return b;
   }

1: 中断流程控制语句
(1) break:用于退出循环语句
赐个例子经常用于swith语句中,用于结束语句;

while (years<=100&& balance <goal) {
	balance +=payment;
	double interst =balance * interstRate/100;
	if(balance<goal)  break ;// 如果满足陈、语句中的条件,则执行break语句,直接退出循环
	year ++;
}

(2) continue 语句: 中断正常的控制流程,直接跳到循环首部;

for ( count =1 ; count<=100;count++) {
	n= in.nextInt();
	if( n<0) continue ;    //  满足n<0 条件,执行continue语句,跳转到count++ 语句
} 

2 数组: 数组是一种数据结构, 用于储存一类型的数值的集合,通过按下表来访问每一个数值;
(1)数组声明:
int []a =new int[5 //这是声明了一个长度为5 名字为a的int型数组;
( 2 ) 数组初始化有三个 动态 静态 默认:
默认初始化都为0;boolean 数组的元素初始化为false; 对象数组则初始化为null;

//数组的赋值 1   逐个赋值   动态初始化,通过下标
		arr0[0]=100;
		arr0[1]=99;
		arr0[2]=88;		
 //创建引用类型一维数组   静态初始化
		peson[] arr2= {
				new peson(1001,"王一“);
				new peson(1002,"王二"),
				new peson(1003,"王三   };

(3)数组的内存分析:
int [] array1=new int[5];
int [] array2= array1; //数组引用之间的赋值
int [] array3 ={1,2,3, 4,5,6};
其内存分析如图:在这里插入图片描述

	(4)数组的输出方法:Arrays.toString (int array);  foreach(0)循环,或者直接用下标输出;
//   用foreach 语句输出:  只能输出,不能修改里面的值;
	int [] array=new int [5];//定义一个容量为5 的数组;
	for(int  i : array) {
	System.out.println (i);
}
System.out.println(array[1]);  // 输出下标为1的数组数据。
 

猜你喜欢

转载自blog.csdn.net/qq_41884976/article/details/83052926