我正在努力让读数成为此代码工作的正确类型。我无法弄清楚如何克服这个错误。 There is a bug associated with it,但我不确定这是否与我相关。
List<String> readings = new ArrayList<String>();
Matcher m = Pattern.compile("\\d{3}").matcher(s);
while (m.find()) {
readings.add(m.group());
}
readings = readings.toArray(new String[0]);
for (int i = 0; i < numberOfElectrodes; i++) {
packet[i] = Integer.parseInt(readings[i]);
}
显示错误:
错误:(313,44)java:不兼容的类型:没有类型的实例 变量T存在,以便T []符合java.util.List
错误:(322,58)java:数组必需,但找到了java.util.List
答案 0 :(得分:3)
问题在于:
readings = readings.toArray(new String[0]);
变量readings
之前被声明为:
List<String> readings = ...;
它的类型是List<String>
。
toArray
返回的类型为String[]
。 String[]
未实现List<String>
,因此您无法将toArray
的结果分配给readings
。
你能做的是;声明一个类型为String[]
的新变量:
String[] readingsArray = readings.toArray(new String[0]);
然后在下面的for循环中引用该变量:
for (int i = 0; i < numberOfElectrodes; i++) {
packet[i] = Integer.parseInt(readingsArray[i]); // <--
或者,您可以跳过创建String[]
,并使用增强的for循环:
// readings = readings.toArray(new String[0]);
for (String element : readings) { // For each string in 'readings'
packet[i] = Integer.parseInt(element);
答案 1 :(得分:1)
readings = readings.toArray(new String[0]);
由于readings
是一个列表,因此无法为其分配数组。
再次
packet[i] = Integer.parseInt(readings[i]);
readings
不是数组,要从列表中获取元素,您必须使用get()
。因此它应该是:
packet[i] = Integer.parseInt(readings.get(i));
答案 2 :(得分:0)
您可能熟悉Python或Ruby等语言,其中变量可以保存任何类型的对象,甚至可以在程序执行的不同点保存不同类型的对象。然而,Java是声明变量类型的语言之一,它们永远不会改变。
在您的计划中,readings
的类型为List<String>
:
List<String> readings = new ArrayList<String>();
List.toArray()
的返回值是一个数组。数组不是List
,否则对该方法没有多大意义。在第313行,编译器抱怨您无法将数组分配给List
类型的变量。关于类型变量的一点是红鲱鱼。
类似适用于第322行:由于readings
是List
,因此您无法将数组索引运算符应用于它。但是,您可以使用List.get(int)
方法。
至少有两种可能的解决方案。如果由于某些原因在您发布的代码中不明显,您需要使用与String
具有相同元素的readings
数组,然后您可以创建一个。例如:
String[] readingsArray = readings.toArray(new String[0]);
然后你可以稍后再做
packet[i] = Integer.parseInt(readingsArray[i]);
另一方面,如果你不特别需要一个数组(我判断的可能性更大),那么你可以完全删除第313行,然后在第322行删除
packet[i] = Integer.parseInt(readings.get(i));