Почему Arraylist не принимает свои собственные методы? - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть программа, в которой я хочу напечатать среднее количество предметов каждого ученика в школе.

Предполагается, что входные данные выглядят примерно так

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

1 Ответ

0 голосов
/ 15 апреля 2020

Вы пытаетесь добавить String в свой arrayList типа Float

if(m.find()){
     grades.add(str);    //str needs to be of float type
...