【发布时间】:2014-03-20 02:53:27
【问题描述】:
我的问题是我无法从arraylist 中获取一个数字并将其转换为int 或double,我必须这样做才能使用体重和身高计算BMI。请看一下!
任务是输入客人的体重、身长和姓名,并将长高比不好的客人分类。主要是我创建了一个包含几个客人的数组,当我运行它时说:
"Exception in thread "main" java.lang.NumberFormatException: For input string "name"
和
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at Diet.putOnDiet(Diet.java:12)
at TestDiet.main(TestDiet.java:7)
Diet 类如下:
public class Diet{
public static ArrayList<Guest> putOnDiet(ArrayList <Guest> list){
ArrayList<Guest> namn = new ArrayList<Guest>();
ArrayList<Guest> hej = new ArrayList<Guest>();
for(int i = 0; i<=list.size()/3; i = i+3){
int langd = Integer.parseInt(list.get(i+1).toString()); //I dont know how to make this work
double vikt = Double.parseDouble(list.get(i).toString());
String name = list.get(i+2).toString();
if ((vikt) > 1.08*(0.9*(langd -100))){
namn.add(new Guest(vikt, langd, name));
}
}
return namn;
}
}
还有Guest 类:
public class Guest {
private double weight; private double length; private String name;
public Guest(double weight, double length, String name){
this.name = name; this.weight = weight; this.length = length; // Maybe the problem is here. How do you modify the class to make it work?
}
public String getName() {
return name;
}
public double getWeight()
{
return weight;
}
public double getLength() {
return length;
}
public void setName(String name) {
this.name = name;
}
public void setWeight(double weight) {
this.weight = weight;
}
public void setLength(double length)
{ this.length = length;
}
public boolean isSlim() {
if (weight >= 1.08 * 0.9 * (length - 100)) {
return false;
}
else
return true;
}
public String toString() {
return name + "\n" + weight + "\n" + length;
}
}
【问题讨论】:
-
旁注:避免在代码中使用幻数。
-
上半部分代码是部分问题^^
-
好吧,您的
toString方法没有以string的形式返回int- 它返回的string无法解析为int。此外,这些值都不是ints,因此您可能需要使用Double.parseDouble()。真正的问题是您正在尝试将test\n40.2\n16.1之类的内容转换为int。计算机应该如何做到这一点?int langd的最终结果是什么?