Java ArrayList。ArrayList到int和double

Java ArrayList。ArrayList到int和double,java,arraylist,int,double,Java,Arraylist,Int,Double,我的问题是,我无法从arraylist中提取一个数字,并将其转换为int或double,我必须使用体重和身高计算BMI。请看一看 任务是输入客人的体重、长度和姓名,并对长高比不好的客人进行分类。大体上,我创建了一个包含几个来宾的数组,当我运行它时,它会显示: "Exception in thread "main" java.lang.NumberFormatException: For input string "name" 及 饮食课程如下: public class Diet{

我的问题是,我无法从
arraylist
中提取一个数字,并将其转换为
int
double
,我必须使用体重和身高计算BMI。请看一看
任务是输入客人的体重、长度和姓名,并对长高比不好的客人进行分类。大体上,我创建了一个包含几个来宾的数组,当我运行它时,它会显示:

"Exception in thread "main" java.lang.NumberFormatException: For input string "name"

饮食
课程如下:

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;
    }
}

您确定要分析的是整数吗

当无法解析编号时,会引发编号解析异常。当字符串不是像“somthing#$%^&”这样的数字时。所以试着换掉这条线

int langd = Integer.parseInt(list.get(i+1).toString());
用这个

try {
       int langd = Integer.parseInt(list.get(i+1).toString());
} catch (NumberFormatException e) {
       System.out.println(list.get(i+1).toString() +" : This is not a number");
       System.out.println(e.getMessage());
}

编辑在阅读了WOUNDEDStevenJones的答案后,我还认为您甚至不应该使用toString()或解析方法。有关更多详细信息,请参阅WOUNDEDStevenJones答案。

看起来您需要将其更改为

for (int i=0; i<list.size(); i++) {
    double langd = list.get(i).getLength();
    double vikt = list.get(i).getWeight();
    String name = list.get(i).getName();
}
for(int i=0;i方法列表。get(i)将返回类型为
Guest
Guest
的对象,其中包含方法、
getWeight()
getLength()

这实际上会给你一个双倍的值作为回报。 以及

这应该能够解析

希望这有帮助


_san

旁注:避免在代码中使用幻数。代码的上半部分是问题的一部分^^^好吧,你的
toString
方法不是以
string
的形式返回
int
,而是返回一个
string
,它无法解析为
int
。而且,这些值都不是de>int
s,因此可能需要使用
Double.parseDouble()
。真正的问题是,您试图将类似于
test\n40.2\n16.1
的东西转换为
int
。计算机应该如何做到这一点?使用
int langd
的最终结果是什么?我使用了这个方法,它可以编译,除非运行main,否则我会得到“线程中的异常”main“java.lang.NoSuchMethodError:Guest.(DDLjava/lang/String;)V”顺便说一句,谢谢你的帮助!不,等等,我做了一些tweeks,现在它工作得很好!非常感谢!感谢大家的帮助!
try {
       int langd = Integer.parseInt(list.get(i+1).toString());
} catch (NumberFormatException e) {
       System.out.println(list.get(i+1).toString() +" : This is not a number");
       System.out.println(e.getMessage());
}
for (int i=0; i<list.size(); i++) {
    double langd = list.get(i).getLength();
    double vikt = list.get(i).getWeight();
    String name = list.get(i).getName();
}
list.get(i).getWeight() 
Integer.parseInt(list.get(i).getWeight().toString())