2016-07-15 49 views
1

在下面的节目,我已经编写一个程序,读取的5名学生,为每个5个测验每个学生标记沿。我有loades在String类型的ArrayList的名称和标志竞猜型双的ArrayList。不过,我需要这些测验标记加载到一个整数,我不知道如何改变这种从双ArrayList中更改为整数的ArrayList

import java.util.Scanner; 
import java.util.ArrayList; 
public class onemoretime 
{ 
    public static final double MAX_SCORE = 15 ; 
    public static final int NAMELIMIT = 5; 
    public static void main(String[] args) 
    { 
     ArrayList<String> names = new ArrayList<>(); 
     ArrayList<Double> averages = new ArrayList<>(); //line that needs to become a Integer ArrayList 
     Scanner in = new Scanner(System.in); 
     for (int i = 0; i < NAMELIMIT; i++) 
    { 
     String line = in.nextLine(); 
     String[] words = line.split(" "); 
     String name = words[0] + " " + words[1]; 
     double average = findAverage(words[2], words[3], words[4], words[5], words[6]); 
     System.out.println("Name: " + name + " Quiz Avg: " + average); 

     names.add(name); 
     averages.add(average); 
    } 
    } 

public static double findAverage(String a, String b, String c, String d, String e) 
{ 
    double sum = Double.parseDouble(a) + Double.parseDouble(b) + Double.parseDouble(c) + Double.parseDouble(d) + Double.parseDouble(e); 
return (sum/NAMELIMIT); 
    } 
} 

对于输入:

Sally Mae 90 80 45 60 75 
Charlotte Tea 60 75 80 90 70 
Oliver Cats 55 65 76 90 80 
Milo Peet 90 95 85 75 80 
Gavin Brown 45 65 75 55 80 

我得到正确的输出

Name: Sally Mae Quiz Avg: 70.0 
Name: Charlotte Tea Quiz Avg: 75.0 
Name: Oliver Cats Quiz Avg: 73.2 
Name: Milo Peet Quiz Avg: 85.0 
Name: Gavin Brown Quiz Avg: 64.0 
+0

所以要整输出,但是你要输出,小数,对吗? – murasing

+0

我只是想在一个整数的ArrayList不是双重的ArrayList – timNorth

+0

读值,但我还是想输出双 – timNorth

回答

1

是这样的吗?

List<Double> dValues = new ArrayList<>(); 
    // not shown: add your double values to the dValues list 
    List<Integer> iValues = dValues.stream() 
     .map(p -> p.intValue()) 
     .collect(Collectors.toList()); 
    // or the equivalent 
    // List<Integer> iValues = dValues.stream() 
    //  .map(Double::intValue) 
    //  .collect(Collectors.toList()); 

注:的intValue()方法可能会不圆像你期望它,所以你可能会得到与拉姆达的那部分有点票友。

1

Java的数学库有几个静态方法,如果你想有一个快速的解决方案,他们返回双打,但你可以将它们转换成整数,像这样

(int)Math.floor(doubleNum); // 4.3 becomes 4 
(int)Math.ceil(doubleNum); // 4.3 becomes 5 
+1

注意,如果你只是想从双为int投,'(INT)someDouble'等同于'(INT)Math.floor(someDouble)' 。 Java在抛出整数时会自动丢弃双精度的小数部分。 – nasukkin

1

在Java中,如果你通过一个分割整数整型,你会得到一个整数,结果将是失去精度, 例子: -

Integer division 8/5 = 1 
Double division  8.0/5.0 = 1.6 
Mixed division 8.0/5 = 1.6 

所以,如果你还是想改变输入整数,酷!继续只是改变你的输入为整数。只要确保其中一个输入是双精度的就可以了。 如: -

Input = saumyaraj zala 45 25 14 78 45 
Output = Name: saumyaraj zala Quiz Avg: 41.4