Я пытаюсь создать программу, которая создает ArrayList, учитывая тип, а также значения, которые будут помещены в ArrayList. Структура ввода, с которой нам нужно работать, это «I 6 7 5 3 1 -1 2», где I - это тип Integer (или S для String и т. Д.), А первое число (6) - это количество значений в ArrayList . Я не уверен, как создать экземпляр ArrayList.
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
String type = scan.next();
int length = scan.nextInt();
int counter = 0;
if (type.equals("I")) {
ArrayList<Integer> A = new ArrayList<Integer>;
}
else if (type.equals("S")) {
ArrayList<String> A = new ArrayList<String>;
}
else if (type.equals("D")) {
ArrayList<Double> A = new ArrayList<Double>;
}
else {
System.out.println("Invalid type");
}
while (scan.hasNext() && counter<length) {
String s1 = scan.next();
A.add(s1);
counter += 1;
}
System.out.print(A);
}
//Removes any duplicate values in the arraylist by checking each value after it
public static <E> ArrayList<E> removeDuplicates(ArrayList<E> list) {
ArrayList<E> inArray = list;
for (int i = 0; i<inArray.size(); i++) {
for (int j = i+1; j<inArray.size(); j++) {
if (inArray.get(i) == inArray.get(j)) {
inArray.remove(j);
}
}
}
return inArray;
}
//Shuffles the contents of the array
public static <E> void shuffle(ArrayList<E> list) {
E temp;
int index;
Random random = new Random();
for (int i = list.size()-1; i > 0; i--) {
index = random.nextInt(i + 1);
temp = list.get(index);
list.set(index, list.get(i));
list.set(i, temp);
}
System.out.print(list);
return;
}
//Returns the largest element in the given arraylist
public static <E extends Comparable<E>> E max(ArrayList<E> list) {
E max = Collections.max(list);
System.out.println(max);
return max;
}
2 ответа
Я не могу в хорошем сознании дать вам ответ, который вы хотите, но скорее я дам вам ответ, который вам нужен.
НЕ ДЕЛАЙТЕ ЭТОГО!
Это не имеет смысла вообще. Стирание типа данных во время компиляции генериков приводит к тому, что ArrayList<Whatever>
действует как ArrayList<?>
. Вы не можете определить универсальный тип во время выполнения, если вы не проверите проверку элементов внутри ArrayList
С таким же успехом вы могли бы написать этот код, он даст вам такие же точные результаты:
public static ArrayList<?> returnProper(String type) {
if(type.length() == 1 && "ISD".contains(type)) {
return new ArrayList();
} else {
System.out.println("Invalid type");
return null;
}
}
ТАК, ПОЖАЛУЙСТА, НЕ ДЕЛАЙТЕ ЭТОГО
Заменить второй E на "?" и затем исправьте метод для возврата.
public static <T> ArrayList<?> returnProper(String type) {
if (type.equals("I")) {
return new ArrayList<Integer>();
} else if (type.equals("S")) {
return new ArrayList<String>();
} else if (type.equals("D")) {
return new ArrayList<Double>();
} else {
System.out.println("Invalid type");
}
return null;
}
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].