2016-07-15 3 views
1

В следующей программе я закодировал программу, которая читает 5 имен учеников вместе с отметками для каждого из 5 квитов для каждого ученика. Я загружаю имена в ArrayList типа String и метки викторины в ArrayList типа Double. Однако нужно загрузить эти викторины метки в Integer, и я не знаю, как изменить этотПереход от Double ArrayList к Integer 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

Я просто хочу прочитать значения in в Integer ArrayList, а не в двойном ArrayList – timNorth

+0

, но я все еще хочу выводить как double – 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-Math библиотека имеет несколько статических методы, если вы хотите, быстрое решение, они возвращаются двойниками, но вы можете бросить их в целые числа, как так

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

Обратите внимание, что если вы просто хотите отбрасывать из double в int, '(int) someDouble' эквивалентно' (int) Math.floor (someDouble) ' , Java просто отбрасывает десятичную часть удвоений при автоматическом литье в целые числа. – nasukkin

1

В Java, если разделить целую часть Целое число, вы получаете Integer и результат будет потеря точности, Пример: -

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 
Смежные вопросы