【发布时间】:2018-11-06 18:46:29
【问题描述】:
我正在编写此脚本以在 Java 中按顺序比较列表/数组中的元素。本质上,代码采用 CSV,将其转换为列表并迭代列表的大小。当我尝试比较这些值时遇到错误,在这种情况下我无法弄清楚:
线程 "main" java.lang.ClassCastException 中的异常:类 java.lang.String 无法转换为类 java.lang.Float(java.lang.String 和 java.lang.Float 在模块 java.base 中加载程序“引导程序”)
在 list.main(list.java:22)
代码是:
public class list{
public static void main(String[] args){
System.out.println("Enter your filename");
Scanner inputValue = new Scanner(System.in);
String fileLocation = inputValue.nextLine();
try {
String checkvalue = new String(Files.readAllBytes(Paths.get(fileLocation)));
ArrayList<Float> listValues = new ArrayList(Arrays.asList(checkvalue.split("[\\r\\n]+")));
System.out.println(listValues);
for (int i = 0; i < listValues.size(); i++){
System.out.println(listValues.get(i));
float valueA = listValues.get(i);
float valueB = listValues.get(i+1);
if (valueA <= valueB){
System.out.println("True");
}
}
}
catch (IOException e){
e.printStackTrace();
}
}
}
【问题讨论】:
-
字符串拆分返回一个字符串。所以
listValues实际上是一个 ArrayList但你已经将它声明为一个 ArrayList<Float>。 -
啊,好吧,有道理。如果这澄清了错误,我来自 Python,与此处相比,类型转换非常简单。在这种情况下,我想我生成列表,然后将列表元素转换为浮点数?还是有一个文档可以让我了解如何通过这种方法直接转换为浮点数?
-
new ArrayList实例化一个原始类型。你应该在那条线上有一个警告。你想要new ArrayList<Float>或只是new ArrayList<>。 -
@DanielPryden:技术上是正确的,但是列表类型之间的转换存在问题,可以在答案中更好地解释。
-
@Makoto:是的,我也看到了。