У меня есть программа, в которой я хочу напечатать среднее количество предметов каждого ученика в школе.
Предполагается, что входные данные выглядят примерно так
000555 maths 88.7 physics 55.6 end
«Конец» - это ключевое слово, которое показывает, что входные данные учащегося завершены. Программа завершается всякий раз, когда кто-то вводит команду stop.
Я сохраняю все оценки, которые идут с пользовательским вводом, в ArrayList. Однако, когда я запускаю программу, я получаю следующие сообщения об ошибках:
error: no suitable method found for add(String) (grades.add(str))
method Collection.add(Float) is not applicable
(argument mismatch; String cannot be converted to float)
error: no suitable method found for set(String) (grades.set(str))
etc...
Мне известно о том, что я не могу напрямую преобразовать строку в число с плавающей запятой, но я попробовал все, и все равно не работает , Что я должен сделать, чтобы компилятор принял эти методы?
Мой код следующий:
import java.util.Scanner;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Student
{
public static void main(String[] args)
{
Scanner s = new Scanner(System.in);
String currentAnswer = "";
String userWords = "";
ArrayList<Float> grades = new ArrayList<Float>();
System.out.println("Enter your a.m. as well as the subjects which you sat in finals");
while(!currentAnswer.equals("end"))
{
currentAnswer = s.nextLine(); // reads the number or word
userWords += "\n" + currentAnswer ;
if(currentAnswer.equals("000000"))
{
System.out.println("The sequence of numbers you entered is: "+userWords);
System.out.println("Exiting...");
System.exit(0);
}
String[] wordsplit = currentAnswer.split(" ");
String pattern = "^\\d+$";
Pattern p = Pattern.compile("\\d+");
stud.clear();
grades.clear();
for (String str : wordsplit)
{
Matcher m = p.matcher(str);
if(str.matches("^\\d+$")){
String name = new String(str);
System.out.println("Code is: "+str);}
if(m.find()){
grades.add(str);
System.out.println("The numbers are: "+str);}
}
grades.set(0,0);
float sum = 0;
for( float i : grades)
{
sum+= i;
}
float avg = sum / grades.size();
System.out.println("The average of student "+name+" is "+avg);
} //while
}//main
}//class