我有一个未指定为double / float的ArrayList,但它包含22.33
,12.56
,34
,21
的双浮点值。
当我从一个文件中读取以保存数据时,我实际上有两个。 他们看起来像这样
static List<MySample> data = new ArrayList<MySample>();
static ArrayList list = new ArrayList();
使用ArrayList<Double> list = new ArrayList();
我可以使用简单的
循环如:
double sum = 0;
double count = 0;
for (Double a : list) {
sum += a;
count++;
}
System.out.println("Average is " + sum / count);
但是当我使用时:
for (Object o : list) {
// How can I do the same with some code here?
}
如何对Object
循环执行相同的操作?
我希望你明白我的问题。
好的,这是我的方法,我在其中反序列化文件以及我想从哪里获取值...
public void deserialize(List<MySample>listan, String path) {
double sum=0;
int count=0;
try {File file = new File(path);ObjectInputStream in = new
ObjectInputStream(newFileInputStream(file));
listan = (ArrayList<MySample>) in.readObject();
for(Object obj: listan){
//here I need the code
}
System.out.println("Good work!");
in.close();
} catch (IOException e) {
System.out.println(e.getMessage());
} catch (ClassNotFoundException ex) {
System.out.println(ex.getMessage());
}
}
答案 0 :(得分:2)
如果您确保list
包含所有双精度值,请将其强制转换为Double
(为了不打破整个循环,必须将try/catch
放入循环中...性能不高):
for (Object o : list) {
try {
sum += ((Double)o).doubleValue();
count++;
} catch(ClassCastException e) {
}
}
但建议不要使用ArrayList list = new ArrayList();
等原始类型列表,更好的方法是List<Double> list = new ArrayList<Double>();
。
答案 1 :(得分:1)
以下内容适合您:
Double sum = (double) 0;
int count =0;
for (Object o: list){
sum= sum+ (Double)o;
count++;
}
System.out.println("Average is " + sum / count);
您应该使用提供编译时类型安全性的Generics。
ArrayList<Double> list = new ArrayList<Double>();
list.add(22.33);
list.add(12.56);
list.add(34.21);
Double sum = (double) 0;
int count =0;
for (Double o: list){
sum= sum+ o;
count++;
}
System.out.println("Average is " + sum / count);
答案 2 :(得分:0)
你可以施放:
for (Object o:list){
sum += (double) o;
count++;
}
答案 3 :(得分:0)
您可以将对象强制转换为Double,至少如果您确定对象属于Double
类型。从Java 5开始,它基本上就是旧的做事方式。
for (Object o:list){
total += ((Double)o).doubleValue();
}
答案 4 :(得分:0)
至少应该使用:static List<Number> list
,因为Double
和Float
延伸Number
。
然后为了你的总和,你可以得到双倍的价值。这是对泛型的正确使用。
import java.util.ArrayList;
import java.util.List;
public class NumberList {
public static void main(String[] args) {
List<Number> list = new ArrayList<Number>();
list.add(1.4142135623730950);
list.add(2.71828f);
list.add(3.14159265359d);
// Average is: 2.4246954309812287
System.out.println("Average is: " + avg(list));
}
public static double avg(List<Number> list) {
double sum = 0;
double count = 0;
for (Number a : list) {
sum += a.doubleValue();
count++;
}
return sum / count;
}
}
答案 5 :(得分:0)
我尝试了以上所有但是没有用,但我想出来了。
我的方法看起来像这样
<?php
foreach ($dateinfo2 as $key => $time)
{
$uInfo = $_SESSION['data']->table('units')->byName($key)->data();//item get data by name
if(isset($_POST['cow'])){
if ($uInfo["keyword"] != 'cow') continue;
}
if(isset($_POST['chicken'])){
if ($uInfo["keyword"] != 'chicken') continue;
}
if (isset($uInfo['type']) && !empty($uInfo['type'])) {
echo '<center><font color="olive">TypE: '.$uInfo['type'].'</font><br>';
}else{
}
}
令我印象深刻的是,Java有许多类型的代码可以做同样的事情。 为什么没有一个通用的代码行呢? 有一些示例差异代码可以执行相同的操作,但无法使用 我的方法......例子
public void deserialize(List <MySample>listan, String path) {
double sum=0;
int count=0;
double average=0;
try {
File file = new File(path);
ObjectInputStream in = new ObjectInputStream(new
FileInputStream(file));
listan = (ArrayList<MySample>) in.readObject();
for (Object o:listan){
sum += Double.parseDouble((String) o);
count ++;
average = sum/count;
}
System.out.printf("The average on %s är %.2f ", item, average);
in.close();
} catch (IOException e) {
System.out.println(e.getMessage());
} catch (ClassNotFoundException ex) {
System.out.println(ex.getMessage());
}
}
Theese没有用,但这段代码为我做了工作
sum += a.doubleValue();
sum += (double) o;
sum += ((Double)o).doubleValue();