包装和类练习(1)

 

目录

 

1.移除元素

 2.删除有序数组中的重复项

3.合并两个有序数组

4.实现ArrayList类 

4.下列在Java语言中关于数据类型和包装类的说法,正确的是()

 5. boolean类型没有包装用的类,这句话是否正确?


1.移除元素

这里使用双指针法来实现,如果不是要找的val值就把值赋值给left,这样就可以排除val来计算新数组的长度。

class Solution {
    public int removeElement(int[] nums, int val) {
      int j = 0;
      for(int i = 0; i < nums.length; i++){
        if(nums[i] != val){
            nums[j++] = nums[i];
        }
      }
      return j;
    }
}

 2.删除有序数组中的重复项

因为数组是有序的所以重复的元素都在一起,只需要前面的值与后面的值相比较就好了,如果不同键j向前移动,进行计数最后得到数组没有重复数字的长度。 

class Solution {
    public int removeDuplicates(int[] nums) {
        int i = 1,j = 1;
       while(i < nums.length){
        if(nums[i] != nums[i - 1]){
            nums[j] = nums[i];
            j++;
        }
        i++;
       }
       return j;
    }
}
     

3.合并两个有序数组

 

class Solution {
 
     public static void merge(int[] nums1, int m, int[] nums2, int n) {
        int k = m + n -1;
        int i = m - 1;
        int j = n - 1;//从末尾开始比较
        while( i >= 0 && j >= 0){
            if(nums1[i] >= nums2[j]){
                nums1[k] = nums1[i];
                i--;
            }else{
                nums1[k] = nums2[j];
                j--;
            }
            k--;
        }
        //如果 i 走完 j 没走完 说明 nums1中的数字大于nums2中的数字 此时队例还没满j还要继续添加
        // 如果 i 没走完 j 走完 说明j中的全部数字已经充满数组并且剩下的nums[i]中的数字都是按照顺序排的  比如数组nums1 = {0,5,7} nums2 = {1,2,3,9}
        while(j >= 0){
            nums1[k] = nums2[j];
            j--;
            k--;
        }
    }
}

4.实现ArrayList类 

import java.util.Arrays;

public class MyArraylist {

    public int[] elem;
    public int usedSize;//0
    //默认容量
    private static final int DEFAULT_SIZE = 10;

    public MyArraylist() {
        this.elem = new int[DEFAULT_SIZE];
    }

    /**
     * 打印顺序表:
     * 根据usedSize判断即可
     */
    public void display() {
        for (int i = 0; i < elem.length; i++) {
            System.out.print(elem[i] + " ");
        }
        System.out.println();
    }


    // 新增元素,默认在数组最后新增
    public void add(int data) {
        if (isFull()) {
            resize();
        }
        this.elem[usedSize] = data;
        this.usedSize++;

    }

    private void resize() {
        this.elem = Arrays.copyOf(this.elem,2 * this.elem.length);
    }


    /**
     * 判断当前的顺序表是不是满的!
     *
     * @return true:满   false代表空
     */
    public boolean isFull() {
        return this.usedSize == elem.length;
    }


    private boolean checkPosInAdd(int pos) throws PosILLegal {
       if(pos < 0 || pos > usedSize){

           throw new PosILLegal("这个位置不合法");
       }
        return true;//合法
    }

    // 在 pos 位置新增元素
    public void add(int pos, int data) {
        try {
            checkPosInAdd(pos);
            if (isFull()) {
                resize();
            }
            for (int i = usedSize; i <= pos; i--) {
                elem[i + 1] = elem[i];
            }
            elem[pos] = data;
            usedSize++;
        } catch (PosILLegal e) {
            e.printStackTrace();
        }

    }

    // 判定是否包含某个元素
    public boolean contains(int toFind) {
        for (int i = 0; i < usedSize; i++) {
            if (elem[i] == toFind) {
                return true;
            }
        }
        return false;
    }

    // 查找某个元素对应的位置
    public int indexOf(int toFind) {
        for (int i = 0; i < usedSize; i++) {
            if (elem[i] == toFind) {
                return i;
            }
        }
        return -1;
    }

    // 获取 pos 位置的元素
    public int get(int pos) {

        try {
            checkPosInAdd(pos);
            checkEmpty();
            return elem[pos];
        } catch (PosILLegal e) {
            
            e.printStackTrace();
        } catch (EmptyException e) {
            e.printStackTrace();
        }
        return -1;
    }

    private void checkEmpty() throws EmptyException{
        if (isEmpty()) {
            throw new EmptyException("顺序表为空");
        }
    }

    private boolean isEmpty() {

            return this.usedSize == 0;

}

    // 给 pos 位置的元素设为【更新为】 value
    public void set(int pos, int value) {
        try {
            checkPosInAdd(pos);
            checkEmpty();
            elem[pos] = value;
        } catch (PosILLegal e) {
            e.printStackTrace();
        } catch (EmptyException e) {
            e.printStackTrace();
        }

    }

    /**
     * 删除第一次出现的关键字key
     *
     * @param key
     */
    public void remove(int key) {
        try {
            checkEmpty();
            int pos = indexOf(key);
            if (pos == -1) {
                return;
            }
            for (int i = pos; i < usedSize - 1; i++) {
                elem[i] = elem[i + 1];
            }
            usedSize--;
        } catch (EmptyException e) {
            e.printStackTrace();
        }

    }

    // 获取顺序表长度
    public int size() {
        return this.usedSize;
    }

    // 清空顺序表
    public void clear() {

        usedSize = 0;
    }
}

 

4.下列在Java语言中关于数据类型和包装类的说法,正确的是()

A.基本(简单)数据类型是包装类的简写形式,可以用包装类替代基本(简单)数据类型

B. long和double都占了64位(64bit)的存储空间。

C.默认的整数数据类型是int,默认的浮点数据类型是float

D.和包装类一样,基本(简单)数据类型声明的变量中也具有静态方法,用来完成进制转化

答案:B

A基本数据类型不是包装类型的简写

C浮点数默认是double

D基本数据类型不能调用方法

 

 5. boolean类型没有包装用的类,这句话是否正确?

A.正确

B.错误

答案:B

Boolean就是它的包装类 

 

### 回答1: double是Java中的一个包装,用于封装基本数据型double。它提供了一些方法,可以对double型的数据进行操作和转换。例如,可以使用double的parseDouble方法将字符串转换为double型的数据,也可以使用doubleValue方法将Double对象转换为double型的数据。此外,double还提供了一些常量,如MAX_VALUE和MIN_VALUE,分别表示double型的最大值和最小值。在Java中,double型的数据通常用于表示浮点数,如小数或科学计数法表示的数值。 ### 回答2: Java的double是基本数据型中的一种,它是一个浮点数型,可以用来表示小数或者整数。在Java中,如果需要使用双精度浮点数,我们可以直接使用double型,而不需要使用其它库或者自定义数据型。 Java的double提供了很多方法来处理双精度浮点数。比如,我们可以使用doubleValue()方法将一个Double对象转换成double型的值;使用compareTo()方法比较两个double型的值的大小;使用isNaN()方法判断一个double型的值是否为非数值。 同时,Java的double还提供了一些常量,如MAX_VALUE、MIN_VALUE、POSITIVE_INFINITY、NEGATIVE_INFINITY和NaN。其中,MAX_VALUE表示double型的最大值,MIN_VALUE表示double型的最小值,POSITIVE_INFINITY表示正无穷大,NEGATIVE_INFINITY表示负无穷大,NaN表示非数值。 除了基本的方法和常量,Java的double还可以拆箱和装箱。拆箱指将Double型的值转换成double型的值,而装箱则是将double型的值封装成一个Double对象。 在实际开发中,我们常常使用double型来表示货币、收入、体重、距离等数值。使用double型可以方便地进行数值计算,并且Java的标准库中提供了许多API来对double型的值进行操作和处理,这大大提高了开发效率。使用double型时需要注意其精度问题,因为在进行除法等计算时,可能会出现精度丢失的情况。此时,我们可以使用BigDecimal来解决这个问题。 综上所述,Java的double是一个非常重要的基本数据型,我们在日常开发中经常使用,需要熟练掌握其使用方法和注意事项。 ### 回答3: 练习Java包装之Double是学习Java语言基础的必备内容,Double是Java中常用的包装之一,它用于将基本数据型double封装成一个对象。Double提供了很多有用的方法,能够方便地进行数字转换、计算和比较等操作。 Double中最常用的方法是parseDouble(),它可以将一个字符串转换为double型的数据。例如,可以使用Double.parseDouble("3.14")来获得一个double型的值3.14。同时,Double还提供了很多其他的方法,如doubleValue()方法用于将Double对象转换为double型,intValue()方法用于将Double对象转换为int型,toString()方法用于将Double对象转换为字符串型等。 此外,在使用Double时还需要注意几个重要的特性。一是Double是不可变的,即一旦创建了一个Double对象,它的值就不能再改变了。这意味着如果需要在程序中对double型的数据进行频繁的修改,就应该使用基本数据型double,而不是Double对象。 二是由于Double是对象,所以在比较两个Double对象时,应该使用equals()方法而不是==操作符。因为==操作符只比较两个对象的内存地址,而不是它们的值,而equals()方法则比较两个对象的值是否相等。 最后,需要了解的是Double中一些重要的常量。例如,Double.MAX_VALUE表示可表示的最大双精度浮点数,Double.MIN_VALUE表示可表示的最小双精度浮点数,NaN表示非数字(Not a Number),Infinity表示正无穷或负无穷。 练习Java包装之Double能够帮助我们更好地理解Java语言的基础知识和语法规则,同时提高我们对数字的处理能力和代码编写的效率。建议在学习Java语言时,重点掌握和实践常用的包装,以更好地应用Java语言进行开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值