【问题标题】:ArrayList. ArrayList to int and double数组列表。 ArrayList 到 int 和 double
【发布时间】:2014-03-20 02:53:27
【问题描述】:

我的问题是我无法从arraylist 中获取一个数字并将其转换为intdouble,我必须这样做才能使用体重和身高计算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 的最终结果是什么?

标签: java arraylist int double


【解决方案1】:

您似乎想将其更改为

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

并为此目的忽略您的 getString() 方法

注意:我不确定你想用不同的索引做什么,但它们可能都是.get(i)

【讨论】:

  • 我使用了这个方法并且它编译除了当我运行主程序时我得到“线程中的异常”主”java.lang.NoSuchMethodError:Guest.(DDLjava/lang/String;)V "
  • 感谢您的帮助!
  • 不等了,我做了几个星期,它现在可以完美运行了!非常感谢!
【解决方案2】:

你确定你正在解析一个整数吗?

当它无法解析数字时,会抛出数字解析异常。当字符串不是像“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 答案。

【讨论】:

    【解决方案3】:

    方法 list.get(i) 将返回 Guest 类型的对象。 Guest 有方法,getWeight()getLength()

    list.get(i).getWeight() 
    

    这实际上会给你一个双倍的回报。 而且,

    Integer.parseInt(list.get(i).getWeight().toString()) 
    

    这个应该可以解析的。

    希望这会有所帮助。

    _san

    【讨论】:

    • 感谢大家的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 2013-09-03
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多