Я хочу создать переменную, которая может отправлять значения int, float и double в мой настраиваемый ArrayList - PullRequest
0 голосов
/ 08 мая 2020

У меня есть собственный массив MyArrayList. Это может хранить только значения типа int, float или double. Но я хочу получить это из пользовательского ввода. У меня есть временная переменная String, которая вводится как строка. Теперь я хочу добавить этого Arraylist. поэтому сначала необходимо преобразовать строку в ее тип.

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);
        }
    }
}

Ответы [ 3 ]

1 голос
/ 08 мая 2020

Это немного странное требование, потому что вы можете хранить только 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, поэтому вам нужно добавить его самостоятельно, если вы хотите его поддерживать.

0 голосов
/ 08 мая 2020

Вы можете попробовать, и я бы также предложил изменить ваш arrayList, чтобы использовать Number вместо Object. https://docs.oracle.com/javase/8/docs/api/java/lang/Number.html

Теперь у вас также может быть Byte / Short и некоторые другие типы в этом списке массивов (но вы даже можете этого захотеть), но в целом вам не понадобится ваш собственная реализация ArrayList.

0 голосов
/ 08 мая 2020

Список только одного типа; если вы хотите использовать больше текста в списке; use Object;

и это не рекомендуется;

в любом случае, у мабе есть больше способов реализовать бизнес;

...