不确定为什么这是错误的我是java的新手,所以如果可以的话请帮助
不兼容的类型
发现:java.lang.Object
required:java.lang.String
String sDividendDate1 = data[0][0];
其中
Object[][] data = {
{ "Tom Jones", new Double(5) },
{ "Paul Smith", new Double(5) },
{ "yyyy/mm/dd", new Double(5) }
}
data[0][0]
不是字符串“Tom Jones”吗?
如何从数据阵列中获取所需数据?
非常感谢任何帮助 - 非常感谢Stephen
答案 0 :(得分:4)
我猜这是编译错误,因为编译器意识到它不能假设所有对象都是字符串。尝试转换返回的值,如下所示:
String sDividendDate1 = (String)data[0][0];
这告诉编译器你认识到数组可能不会返回一个String,但是你愿意冒这个风险,因为你认为你知道这个值在运行时实际上是什么。如果代码在执行转换时发现实际上没有字符串,那么您将获得运行时异常。
修改强>
Andy K对类型安全有一个很好的观点。基于您给出的示例,您似乎正在尝试表示相互关联的数据。如果您能想到名称来表示数据的相关方式,您可以使用类更自然地对其进行建模,如下所示:
public class PlayerAverage {
public PlayerAverage(String name, double average) {
this.name = name;
this.average = average
}
private String name;
private double average;
public String getName() {return name;}
public double getAverage() {return average;}
}
然后你可以创建一个这样的数组:
PlayerAverage[] playerAverages = {
new PlayerAverage("Tom Jones", 5),
new PlayerAverage("Paul Smith", 5)
};
因为它会被输入,所以你可以轻松地迭代这个数组,而不需要任何类型转换:
for(PlayerAverage playerAverage : playerAverages) {
String name = playerAverage.getName();
double average = playerAverage.getDouble();
}
请注意,此方法使用了许多最佳实践,例如私有字段和公共getter,这可能对您所做的事情有些过分。但是创建类来表明数据的相关性以及它应该表示的内容通常是一个好主意。
答案 1 :(得分:1)
虽然您可以强制解决此问题,但最好是改进代码以获得类型安全性。 如果可能,请使用地图。
import java.util.*;
Map<String, Double> map = new HashMap<String, Double>();
map.put("Tom Jones", 5.0);
map.put("Paul Smith", 5.0);
map.put("yyyy/mm/dd", 5.0);
答案 2 :(得分:0)
String sDividendDate1 = data [0] [0]。 toString(); //返回字符串
Object类是String类的超类,因此sDividendDate1不能包含Object类的变量
答案 3 :(得分:0)
您的描述缺少一些结束括号。现在,它是一个数组数组的数组......从未关闭过。我希望使用:
Object[][] data = { {"Tom Jones", new Double(5)}, {"Paul Smith", new Double(5)}, {"yyyy/mm/dd", new Double(5) }};
编辑:Kirk编辑了它并修复了缺失的大括号,但我认为缺少大括号会导致您在编译时看到的错误消息。