首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

关于this用法的小疑点

2012-12-14 
关于this用法的小问题关于this的小问题for(Student e: this){total+e.average(m)i++}public void addSt

关于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());     


}
}
这个是能通过编译器的,但我不是很懂this的用法。。
[其他解释]
你上下给的两端程序完全不一样了.

什么情况
[其他解释]

引用:
你上下给的两端程序完全不一样了.

什么情况

后面给的程序是完整的。。忽略之前的那个吧
[其他解释]
嗯 你下面的程序我看了一下不存在你上面程序的问题 你要问的问题是什么?
[其他解释]
引用:
嗯 你下面的程序我看了一下不存在你上面程序的问题 你要问的问题是什么?


this通常指代当前对象,那么如果我先后通过addEtudiant方法,添加了张三,李四,王五三个对象,那么for(Etudiant e: this)循环里的那个this指代的这三个对象的集合吗??如果指代当前对象的话,最后添加的对象明明是王五,this应该指代的是王五吧。。那如果是王五。。这个循环就只循环一次了。。。

热点排行