java - 不使用 for 循环打印出数组的最后一个数字
问题描述
结果给了我这个,但没有打印出最后一个 int (200)。我在 main 方法中添加了一些随机数,并通过使用 for 循环将它们按顺序排列。但是,它完全忽略了最后一个(最大)整数,即 200。我该如何解决这个问题?
0: 13
1: 21
2: 25
3: 44
4: 50
5: 63
6: 88
7: 99
8: 100
这是我添加随机整数的主要方法。
public static void main(String[] args) {
SortedIntList myList = new SortedIntList(10);
myList.add(100);
myList.add(50);
myList.add(200); // Does not print this line
myList.add(25);
myList.add(13);
myList.add(63);
myList.add(21);
myList.add(99);
myList.add(88);
myList.add(44);
System.out.println(myList);
}
}
这是用于打印按从小到大排序的所有整数的 for 循环方法。它将它们按顺序排列得很好,只是由于某种原因没有添加 200。
public void add(int value) {
if (numElements == list.length) {
System.out.println("Can't add, list is full");
} else {
if (numElements == 0) {
list[numElements] = value;
numElements++;
} else {
int oldValue = 0;
boolean flag = false;
for (int i = 0; i < numElements; i++) {
if (value < list[i] && !flag) {
oldValue = list[i];
list[i] = value;
flag = true;
if (numElements + 1 != list.length) {
numElements++;
}
} else if (flag) {
int temp = list[i];
list[i] = oldValue;
oldValue = temp;
if (i == list.length - 1) {
list[i + 1] = temp;
numElements++;
break;
}
if (temp == 0) {
break;
}
if (numElements + 1 != list.length) {
numElements++;
}
}
else if (i == numElements - 1) {
list[numElements] = value;
if (numElements + 1 != list.length) {
numElements++;
break;
}
}
}
}
}
}
这就是 toString 方法的样子
public String toString()
{
String returnString = "";
for (int i = 0; i < numElements; i++) {
returnString += i + ": " + list[i] + "\n";
}
return returnString;
}
解决方案
我仔细查看了您的add
实现,发现您想要实现的目标很复杂。一世
- 删除了很多代码
- 重命名你的
flag
变量 - 将循环上限从 更改为
<
,<=
因为您的列表应该增加一 - 改变了最后
else if
- 简化了
numElements++
应该立即发生的事情,其他一切都是/已经是很大的代码气味
以结束
public void add(int value) {
if (numElements == list.length) {
System.out.println("Can't add, list is full");
} else {
if (numElements == 0) {
list[numElements] = value;
} else {
int oldValue = 0;
boolean moveUpward = false;
for (int i = 0; i <= numElements; i++) {
if (value < list[i] && !moveUpward) {
oldValue = list[i];
list[i] = value;
moveUpward = true;
} else if (moveUpward) {
int temp = list[i];
list[i] = oldValue;
oldValue = temp;
} else if (i == numElements) {
list[i] = value;
}
}
}
numElements++;
}
}
现在正确输出
0:13 1:21 2:25 3:44 4:50 5:63 6:88 7:99 8 :
100 9 :200
推荐阅读
- converse.js - conversejs:用户配置文件未在设备上更新
- typescript - TS2749:“XXX”指的是一个值,但在这里被用作一个类型。您的意思是“typeof XXX”吗?
- google-apps-script - 如何将两个电子表格中的数据与 appscript 进行比较?
- postgresql - PostgreSQL RLS 未按预期应用
- d3.js - d3.select 不是函数,但 d3 已导入(* as d3)
- matlab - 如何显示两个符号矩阵之间的相等性?
- pandoc - Pandoc citeproc 参考书目条目排序遵循 bib 文件中的条目顺序
- javascript - 如何查询不同值包含部分给定字符串的 Firestore?
- node.js - 请求正文中的 _doc
- python - Discord.py 不显示它所在的服务器数量