Java 为什么Arraylist不';我不接受它';谁有自己的方法?

Java 为什么Arraylist不';我不接受它';谁有自己的方法?,java,string,arraylist,methods,Java,String,Arraylist,Methods,我有一个程序,我想打印一所学校每个学生的平均科目 输入应该是这样的 000555 maths 88.7 physics 55.6 end “End”是一个关键字,表示学生的输入数据已终止。只要有人停止输入,程序就会终止 我将用户输入的所有等级存储在ArrayList中。但是,当我运行该程序时,会收到以下错误消息: error: no suitable method found for add(String) (grades.add(str)) method Collection.add(Fl

我有一个程序,我想打印一所学校每个学生的平均科目

输入应该是这样的

000555 maths 88.7 physics 55.6 end 
“End”是一个关键字,表示学生的输入数据已终止。只要有人停止输入,程序就会终止

我将用户输入的所有等级存储在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
import java.util.Scanner;
导入java.util.ArrayList;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
公立班学生
{
公共静态void main(字符串[]args)
{
扫描仪s=新的扫描仪(System.in);
字符串currentAnswer=“”;
字符串userWords=“”;
ArrayList品位=新建ArrayList();
System.out.println(“输入你的上午以及期末考试的科目”);
而(!currentAnswer.equals(“end”))
{
currentAnswer=s.nextLine();//读取数字或单词
userWords+=“\n”+currentAnswer;
if(currentAnswer.equals(“000000”))
{
System.out.println(“您输入的数字顺序是:“+userWords”);
System.out.println(“退出…”);
系统出口(0);
}
String[]wordsplit=currentAnswer.split(“”);
字符串模式=“^\\d+$”;
模式p=模式。编译(\\d+);
stud.clear();
等级。清晰();
for(字符串str:wordsplit)
{
匹配器m=p.Matcher(str);
if(str.matches(“^\\d+$”){
字符串名称=新字符串(str);
System.out.println(“代码是:“+str”);}
if(m.find()){
添加(str);
System.out.println(“数字是:“+str”);}
}
等级集(0,0);
浮点数和=0;
适用于(浮动一:等级)
{
总和+=i;
}
浮动平均值=总和/等级.size();
System.out.println(“学生“+name+”的平均值为“+avg”);
}//而
}//主要
}//阶级

您正在尝试向浮动类型的arrayList添加字符串

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

grades
是一个
ArrayList
。为什么您认为您应该能够向它添加一个
字符串
?感谢您的回答,我确保从字符串中删除数字部分使用
等级。添加(Float.parseFloat(str))
。函数
Float.parseFloat
str
解析为
Float
,前提是
str
表示一个数字。