当前位置: 代码迷 >> Eclipse >> 关于this用法的小疑点
  详细解决方案

关于this用法的小疑点

热度:81   发布时间:2016-04-23 02:00:54.0
关于this用法的小问题
关于this的小问题
    for(Student e: this) 
    {
total+=e.average(m);
i++;
    }
    public void addStudent(Student e)
    {
this.add(e);
    }
 都说this指代当前对象,for里的this指代的是新加入Student集合里的对象吗??如果我addStudent方法前后添加了张三,李四,王五,三个对象,那for里的this指代的是最后一个对象,还是这三个整体。。。话说如果最后添加的王五,那当前对象应该是王五吧!!那这个循环就只循环一次???这也不合逻辑呀。。
请高人指点。。。谢过


------最佳解决方案--------------------
恩 你这个回复和你开始的程序是一样的了.在 for(Student e: this) 这种写法的地方 迭代容器的时候是不能对容器增删操作的 我记得会抛异常 也就是说在for没有退出之前不操作这个容器 你在for里边对当前对象进行添加操作 我估计会抛出异常. 你可以自己试试 我现在没有编译环境就不帮你试验了.
------其他解决方案--------------------
你这个程序本身就有问题 进行迭代的时候不能对原数组进行增加 删除数据操作 要不迭代就混乱了 你这个能编译过去? 
------其他解决方案--------------------


引用:
你这个程序本身就有问题 进行迭代的时候不能对原数组进行增加 删除数据操作 要不迭代就混乱了 你这个能编译过去?



源代码有点长,我就截了其中的两个方法

import java.util.*;

public class Filiere extends TreeSet<Etudiant> 
{
public Filiere(Comparator <Etudiant> c)
{
super(c);
}
public Filiere()
{
super(new MoyenneComparator());
}
 
public void display()
{
for(Etudiant e: this)
{
System.out.println(e.getNom() + " " + e.moyenneGenerale());
}
}

public void displayAlpha()
{
List <Etudiant> l = new ArrayList<Etudiant>();
l.addAll(this);
Collections.sort(l, new AlphaComparator());
for(Etudiant e: l)
{
System.out.println(e.getNom() + " " + e.moyenneGenerale());
}
}

public void displayMoyenne()
{
List <Etudiant> l = new ArrayList<Etudiant>();
l.addAll(this);
Collections.sort(l, new MoyenneComparator());
for(Etudiant e: l)
{
System.out.println(e.getNom() + " " + e.moyenneGenerale());
}
}

public Etudiant major()
{
List <Etudiant> l = new ArrayList<Etudiant>();
l.addAll(this);
Collections.sort(l, new MoyenneComparator());
return l.get((l.size()-1));
}

public double  moyenneMatiere(String m)
{
double total=0, i=0;
for(Etudiant e: this) 
{
total+=e.moyenneMatiere(m);
i++;
}
return (total/i);
}

 
public void addEtudiant(Etudiant e)
{
this.add(e);
}
}
class MoyenneComparator implements Comparator<Etudiant>
{
public int compare(Etudiant o1, Etudiant o2) 
{
 if (o1.moyenneGenerale()>o2.moyenneGenerale())
 return 1;
 else
 return -1;

}
class AlphaComparator implements Comparator<Etudiant>
{
public int compare(Etudiant o1, Etudiant o2) 
{
return (o1.getNom()).compareTo(o2.getNom());     
  相关解决方案