[英]Array getting overwritten with the last item java
我的數組被最后一個對象覆蓋,並且不確定為什么在同一位置上的System.out.println()
正確打印所有項目。 我正在嘗試更新包含學生分數及其排名的表格,但所有學生都將獲得數組中的最后一項。
public static void updateSubjectRank(String subject, String extype, int academicyear, int semester, int level) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Criteria cr = session.createCriteria(EduResults.class);
cr.add(Restrictions.eq("subject", subject));
cr.add(Restrictions.eq("extype", extype));
cr.add(Restrictions.eq("acedemicyear", academicyear));
cr.add(Restrictions.eq("semester", semester));
cr.add(Restrictions.eq("level", level));
ScrollableResults items = cr.scroll();
int count = 0;
double[] scores = getSubjectScores(subject, extype, academicyear, semester, level);//this gets all the scores in a double array
int[] ranks = Rank.getRank(scores);//this gives me the ranks of the scores above
while (items.next()) {
EduResults res = (EduResults) items.get(0);
for (int i : ranks) {
res.setSubjectRank(i + 1);//this updates the database with the last item in the array
System.out.println(i+1);///this prints the ranks properly
session.saveOrUpdate(res);
}
if (++count % 100 == 0) {
session.flush();
session.clear();
}
}
tx.commit();
} catch (Exception asd) {
log.debug(asd.getMessage());
if (tx != null) {
tx.rollback();
}
} finally {
session.close();
}
}
我已經看到過類似的問題,但是當系統正確打印它們時,這看起來很奇怪。 我在這里想念什么嗎?
res.setSubjectRank(i + 1);
這行不是在循環中反復更新主題排名嗎? 您期望這做什么? 在第一個迭代中,它將對其進行更新,並將一直更新到最后一個迭代,並且最后一個迭代將具有ranks數組中的最后一項。
我終於找到了解決方法。 我將為可能遇到相同問題的任何人發布答案。 由於具有相同分數的學生將具有相同的排名,因此您可以迭代每個分數並更新排名。 像這樣:
public static void updateSubjectRank(String subject, String extype, int academicyear, int semester, int level) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
double[] scores = getSubjectScores(subject, extype, academicyear, semester, level);
int[] ranks = Rank.getRank(scores);
for (double d : scores) {
Criteria cr = session.createCriteria(EduResults.class);
int rank = Rank.getRank(Rank.getRank(scores), Rank.getArrayIndex(scores, d)) + 1;
cr.add(Restrictions.eq("subject", subject));
cr.add(Restrictions.eq("extype", extype));
cr.add(Restrictions.eq("acedemicyear", academicyear));
cr.add(Restrictions.eq("semester", semester));
cr.add(Restrictions.eq("level", level));
cr.add(Restrictions.eq("scorePcnt", d));
ScrollableResults items = cr.scroll();
int count = 0;
while (items.next()) {
EduResults res = (EduResults) items.get(0);
res.setSubjectRank(rank);
System.out.println(rank);
session.saveOrUpdate(res);
if (++count % 100 == 0) {
session.flush();
session.clear();
}
}
}
tx.commit();
} catch (Exception asd) {
log.debug(asd.getMessage());
if (tx != null) {
tx.rollback();
}
} finally {
session.close();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.