2

Im trying to write a program which has a method Exam mark This contains objects of pupil class and a string that gives the pupils name. The method should return the pupils exam mark and their name. if there is a pupil called joe and their exam score is 32 then when joe is passes 32 should be printed.

In the student class i have getters, for getexamscore and in a subclass i have the getter getpupilname. the vector elements should be in the pupil class.

If the pupil is not in the class -1 should be returned.

Here is my method and everything must be in only this method:

import java.util.*;
public class vectors
{
   public int lookforMark(Vector <pupil> v, String name)
   {
       int examscoremark=0;
       name="";
       try{

           for(int i=0; i<=v.size(); i++){
               try
               {
                  int element= v.elementAt(i).getexamscore();
                  String element2= v.elementAt(i).getpupilname();


               }
               catch(Exception e)
               {
                   System.out.println("there is an error");
                   return -1;
               }  
            }
        }

Can someone help me on returning the exammark with the pupil name?

4

5 回答 5

2

setMark您可以在瞳孔上创建一个方法。

或者,创建一个对象来保存名称并标记并返回它。

public class ExamMark {
    private final String name;
    private final int mark;

    public ExamMark(String name, int mark){
        this.name = name;
        this.mark = mark;
    }

    public String getName(){
        return name;
    }

    public int getMark(){
        return mark;
    }
}

像这样使用它:

return new ExamMark(v.elementAt(i).getpupilname(), v.elementAt(i).getexamscore());
于 2012-04-26T09:23:46.010 回答
1

这个问题有两个答案:

  1. 使用一个Pair<E,K>类。有几个可通过 Google 获得。这是捷径。
  2. 创建一个特定于您要返回的信息的持有对象。这是更清洁的方式,通常应该是首选。
于 2012-04-26T09:24:38.583 回答
1

你特意说了

在学生类中,我有 getter,对于 getexamscore,在子类中我有 getter getpupilname。向量元素应该在瞳孔类中。

因此,您不需要任何额外的包装类。而不是返回一个 int,而是像这样返回一个瞳孔对象

public pupil lookforMark(Vector <pupil> v, String name) {
      for(int i = 0; i < v.size(); i++)
         if(v.elementAt(i).getpupilname().equals(name))
            return v.elementAt(i);
      return null;
}

就这么简单。现在学生拥有姓名和年级。

稍后编辑:更正了 for 循环中的错误。

于 2012-04-26T09:48:09.277 回答
0

最好使用List或Map,vector会降低性能吗?

创建将具有用户和学生对象的类结果,并使用键作为用户初始化哈希图,值将是结果对象。

映射 userMap = new HashMap();

public Result getUserMarks(String user){

Result result = userMap.get(user);  

    return result;
}
于 2012-04-26T09:40:28.697 回答
0

一次返回两个对象的最佳方法是将这两个对象包装在可以包含两个值的标准 java 对象中。这将是一个类型的对象Map.Entry<T1, T2>。要创建这样的对象,您将使用:

new AbstractMap.SimpleEntry<T1, T2>(value1, value2);

所以在你的情况下new AbstractMap.SimpleEntry<Integer, String>(mark, name);

于 2016-01-13T10:04:29.267 回答