我在一个类中存在一个arraylist,我将数字存储在。类中的方法将数据添加到arraylist中需要一个float参数 - 这是因为有些数据是float,有些是整数。
我需要使用方法提取一些数据并将其转换为Int但无法解决问题。我尝试了各种各样的铸造等,但因为它是arraylist中的对象我不能让它工作。
(所以如果这听起来不太清楚,我已经连续8个小时了,所以大脑现在有点油炸了)
例如,arraylist被称为subjectResults,我尝试过:
numberOfA = (Integer)subjectsResults.get(1);
其中numberOfA是一个Int(我知道索引在哪里也是数据 - 这就是我直接引用1的原因)
我尝试过使用toString和parseInt这样的事情:
numberOfA = (Integer.parseInt((String)subjectsResults.get(1)));
我如何实现这一点 - 我需要从索引(1)中提取数字以在switch / case语句中使用以显示菜单选项
答案 0 :(得分:2)
有几种方法可以解决这个问题,一种直接的方法就是:
Object value = subjectsResults.get(1);
if (value instanceof Integer) {
numberOfA = (Integer) value;
} else if (value instanceof Float) {
numberOfA = ((Float) value).intValue();
} else {
handle this unusual case
}
更聪明的解决方案是使用公共超类Number
。 Integer
和Float
都是Number
的子类 - 因此他们共享方法intValue()
。
import java.util.ArrayList;
import java.util.List;
public class Snippet {
public static void main(String[] args) {
// define test data
List<Number> subjectsResults = new ArrayList<>();
subjectsResults.add((int) 50);
subjectsResults.add((float) 33.333f);
// create target list
List<Integer> subjectsNumbers = new ArrayList<>();
// iterate over input
for (Number number : subjectsResults) {
// use method "intValue", which is available for all "Number"-objects
subjectsNumbers.add(number.intValue());
}
System.out.println(subjectsNumbers);
}
}
控制台中的输出:
[50, 33]
答案 1 :(得分:0)
类似于slartidan的解决方案,除了我不喜欢类型检查,因此将使用泛型。
public class FloatAndInt {
private static <T extends Number> void addItemToArray(final T item,final List numberList) {
numberList.add(item);
}
private static void iterateArrayList(final List<Number> numberList) {
for (Number n:numberList) {
System.out.println(n.intValue());
}
}
public static void main(String args[]) {
List<Number> numberList = new ArrayList<Number>();
addItemToArray(2,numberList);
addItemToArray(4.3f,numberList);
//addItemToArray(Long.MAX_VALUE, numberList);
//addItemToArray(Double.MAX_VALUE, numberList);
iterateArrayList(numberList);
}
}
输出:
private static void iterateArrayList(final List<Number> numberList) {
for (Number n:numberList) {
System.out.println(n.intValue());
}
}
public static void main(String args[]) {
List<Number> numberList = new ArrayList<Number>();
addItemToArray(2,numberList);
addItemToArray(4.3f,numberList);
//addItemToArray(Long.MAX_VALUE, numberList);
//addItemToArray(Double.MAX_VALUE, numberList);
iterateArrayList(numberList);
}