首页 > 解决方案 > 我想创建一个变量,可以将 int、float 和 double 值发送到我的自定义 ArrayList

问题描述

我有我的自定义数组列表 MyArrayList。那只能存储 int、float 或 double 值。但我想从用户输入中得到它。我有一个临时字符串变量,它作为字符串输入。现在我想添加那个数组列表。所以必须首先将字符串转换为其类型。

class MyArrayList<E> extends ArrayList<E>{

    @Override
    public boolean add(E e) {
        if(e instanceof Integer || e instanceof Float || e instanceof Double) {
            super.add(e);
            return true;
        } else {
            throw new ClassCastException("Please enter Integer, Float or Double");
        }
    }
}

public class TestArrayList{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        MyArrayList<Object> arraylist = new MyArrayList<>();
        Object object = new Object();
        try {
            System.out.println("Enter Elements");
            System.out.println("To stop input press '.'");
            String temp;
            while(scanner.hasNext()) {
                temp = scanner.nextLine();
                try {                   
                    object = temp;
                } catch(Exception e) {}
                if(temp.equals(".")) break;
                else
                    arraylist.add(temp);
            }
            scanner.close();
            System.out.println(arraylist.toString());       
        } catch(Exception e) {
            System.out.println(e);
        }
    }
}

标签: javaarraylist

解决方案


这是一个有点奇怪的要求,因为您只能存储Object在您的类中,并且instanceof当您从列表中获取元素时必须使用。转换字符串的一种简单方法是尝试转换然后捕获但忽略任何这样的异常

public static Object convertToSomeNumber(String input) {
    try {
        return Integer.valueOf(input);
    } catch (Exception e) {
    }

    try {
        return Double.valueOf(input);
    } catch (Exception e) {
    }

    return null;
}

现在您可以在temp变量上使用它,如果结果不为空,则将结果添加到列表中。

请注意,我忽略了 Float,所以如果你想支持它,你需要自己添加它。


推荐阅读