java基础问题(二)

1丶break语句

 public static int fun(){            
     int temp=0;                     
     int i = 1;                                                      
     for (;; i++) {     
         temp += i;
         if(temp > 1000){
         break;   //当temp大于1000时终止循环
         }                  
     }                               
     return i;                     
 }                                   

2丶continue语句
输出100-200之间能被3整除的数

public static void continueTest() {
        int j = 0;
        for (int i = 100; i <= 200; i++) {
            if (i % 3 == 0) {
                continue;    //终止本次循环并输出能被3整除的数
            }
            System.out.printf("% 5d", i);
            j++;
            if (j % 10 == 0) {        //j能被10整除时,换行输出
                System.out.println();
            }
        }
    }

3丶一维数组
一维数组的初始化即定义

 public  static void Array(){
        int[] array1 = new int[10];
        int[] array2 = {1,2,3,9,5};
        Arrays.sort(array2);
        array1 = new int[]{1,2,3};
    }

用数组输出斐波那契数列的前20项

   public  static  void Fibonaci(int[] array){
         array[0] = 1;
         array[1] = 1;
        for (int i = 2; i < array.length; i++) {
            array[i] = array[i-1] + array[i-2];//数组第i项的值等于第i-1与第i-2项的he
        }
    }

4丶实现二分查找算法

   public static int biseCtion(int array[],int x){
        int left = 0;
        int right = array.length-1;//将数组最后一个元素的下标值赋给right
        int middle = 0;
        if(x < array[left] || x > array[right] || left > right){//如果x值在数组最大与最小值之外或者left>right
            return -1;
        }
        while (left <= right){  
            middle = (left + right)/2;  
            if(x < array[middle]){
                right = middle - 1;       //将middle-1的值赋给right成为新的right
            }else if(x > array[middle]){
                left = middle + 1;   //将middle+1的值赋给left成为新的left
            }else {
                return middle;    //返回middle的值
            }
        }
        return -1;//没有找到x的值时返回-1
    }

5丶求连续子数组的最大和

 public static int maxArray(int arrray[],int n){
        int result = 0;   //子数组相加的和
        int temp = 0;     //从起点开始的子数组元素相加的和
        result = temp =arrray[0];     //从第一个元素开始
        for (int i = 1; i < n ; i++) {
            temp = Math.max(temp + arrray[i] , arrray[i]);//用当前元素值和从起点开始到当前元素值得和作比较,值大者赋给temp
            result = Math.max(temp , result);//用当前子数组的和与当前的result作比较,值大者赋给result
        }
        return result;//返回result的值,即为子数组和的最大值
    }

6丶交换两数时会出现的问题

public class TestDemo5 {
    public static void swap(int a,int b){
        int temp = 0;
        temp = b;
        b = a;
        a = temp;
    }
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        swap(a,b);
        System.out.println(a);
        System.out.println(b);
    }
}

输出为10,20 我们会发现这两个数的值并没有交换,这是因为在JAVA中所不能直接这样传地址,我们给方法“传址”时实际上传递的是实参的地址的拷贝,它跟我们实参所指向的地址虽然相同,但却是两个不同的个体。所以我们在方法中对形参进行重新赋值时,改变的只是形参所指的地址,而实参所指向的地址并没有被改变,所以其值不变。

改进方法:

public class TestDemo5 {
    public static void swap(int a,int b){
        int temp = 0;
        temp = b;
        b = a;
        a = temp;
        System.out.println(a);
        System.out.println(b);
    }
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        swap(a,b);
    }
}

7丶逆置数组

  public static void nzArray(){
        int[] a={1,2,3,4};   //定义数组a
        int j = a.length-1;   //将数组最后一个元素的下标值赋给j
        for (int i = 0; i < j; i++,j--) {
            int temp = 0;
            temp = a[j];
            a[j]=a[i];
            a[i]=temp;        //将数组第一个元素与最后一个元素交换,第二个与倒数第二个元素交换,以此类推
        }
        System.out.println(Arrays.toString(a));//打印数组
    }

猜你喜欢

转载自blog.csdn.net/qq_38098946/article/details/83098725