java - j在循环中取什么值
问题描述
类中以下行的行为是什么Sort
?
for (int j = i+1; j > ListPerson.size(); j++) {
我添加System.out.println(j);
了查看 所取的值j
,但是执行时,没有显示任何值!为什么 Eclipse 不认为ListPerson.get(j)
是错误,知道j > ListPerson.size()
吗?!
package Tests;
public class Person {
String nom;
int age;
public Person(String nom, int age) {
this.nom = nom;
this.age = age;
}
}
package Tests;
import java.util.ArrayList;
import java.util.List;
import CompUnivSol2.Etudiant;
public class Sort {
public static void main(String[] args) {
List<Person> ListPerson = new ArrayList<Person>();
ListPerson.add(new Person("Paul", 20));
ListPerson.add(new Person("Coco", 18));
ListPerson.add(new Person("Eric", 4));
String temp1;
int temp2;
for (int i = 0; i < ListPerson.size(); i++) {
for (int j = i + 1; j > ListPerson.size(); j++) {
if (ListPerson.get(i).age > ListPerson.get(j).age) {
temp1 = ListPerson.get(j).nom;
ListPerson.get(j).nom = ListPerson.get(i).nom;
ListPerson.get(i).nom = temp1;
temp2 = ListPerson.get(j).age;
ListPerson.get(j).age = ListPerson.get(i).age;
ListPerson.get(i).age = temp2;
}
}
}
for (int i = 0; i < ListPerson.size(); i++) {
System.out.print("\n N°" + (i + 1) + ": " + ListPerson.get(i).nom + ": " + ListPerson.get(i).age); //le \n pour mettre chaque
//établissement dans 1 ligne
}
}
}
类中的最后一个循环Sort
显示以下内容:
N°1:保罗:20
N°2:可可:18
N°3:埃里克:4
解决方案
因为j > ListPerson.size()
在下面一行
for (int j = i + 1; j > ListPerson.size(); j++)
这个循环根本没有被执行。
当i = 0
-----> j = 1
-----> 条件被评估为1 > 3
(ie j > ListPerson.size()
)
如您所见,1 > 3
isfalse
因此循环不会被执行。
您需要将其更改为
for (int j = i + 1; j < ListPerson.size(); j++)
除了这个问题,你的排序逻辑也不正确。而不是交换人,你只是交换他们的名字。要解决问题,请更换
String temp1;
int temp2;
for (int i = 0; i < ListPerson.size(); i++) {
for (int j = i + 1; j > ListPerson.size(); j++) {
if (ListPerson.get(i).age > ListPerson.get(j).age) {
temp1 = ListPerson.get(j).nom;
ListPerson.get(j).nom = ListPerson.get(i).nom;
ListPerson.get(i).nom = temp1;
temp2 = ListPerson.get(j).age;
ListPerson.get(j).age = ListPerson.get(i).age;
ListPerson.get(i).age = temp2;
}
}
}
和
Person temp = null;
for (int i = 0; i < ListPerson.size(); i++) {
for (int j = i + 1; j < ListPerson.size(); j++) {
if (ListPerson.get(i).age > ListPerson.get(j).age) {
temp = ListPerson.get(i);
ListPerson.set(i, ListPerson.get(j));
ListPerson.set(j, temp);
}
}
}
但是,一种优雅的方式是使用Collections.sort
这种方式而不是排序方式。
如有任何疑问/问题,请随时发表评论。
推荐阅读
- java - 如何将 Scala List[String] 转换为旧版 Java List
- python - 附加到关系
- python - 如何在python中重新缩放箱线图的y轴
- python - 缺少 1 个必需的位置参数:“密钥”加密
- javascript - 未捕获(承诺中)类型错误:无法读取 null 的属性“0”。如果超过 4 个标记,谷歌地图地理编码器
- javascript - 简单的香草 JavaScript 事件侦听器不起作用
- r - 将每日日期转换为 R 中的两周
- matplotlib - 如何将 3 个 seaborn 散点图放在一起?
- android - 如何在 AppBar 下方创建一个裁剪的 NavigationDrawer?
- c# - CrystalReportViewer 给出错误,“创建组件失败”