gpt4 book ai didi

java - 在 while 循环中运行多次迭代

转载 作者:行者123 更新时间:2023-12-01 09:16:18 26 4
gpt4 key购买 nike

我正在尝试解决查找数组中最小和第二小的元素的问题。

我正在考虑将两个指针放在数组的第 0 个索引上。两个指针从左向右移动,遍历整个数组。第一个指针 ptr1 确定最小元素,而第二个指针旨在确定第二个最小元素。第一个指针工作正常,但第二个指针无法遍历。 While 循环仅在第二个指针迭代 1 次后退出。

Is it possible to have n pointers in a while loop & make them traverse from left to right turn by turn?

或者我做错了什么。

下面是代码

int arr[] = {12,13,1,10,34,1}; 
int ptr1 = 0;
int ptr2 =0;
int min = Integer.MAX_VALUE;
int minSec = Integer.MAX_VALUE;
int arrLen=arr.length-1;

while(ptr1<arrLen && ptr2<arrLen){

if(arr[ptr1]<min){ // this if works great finds the min element
min=arr[ptr1];
ptr1++;
}else{
ptr1++;
}

//flow enters once & exits the while loop
if(ptr1==arrLen && arr[ptr2]<minSec && arr[ptr2]>min){
minSec=arr[ptr2];
ptr2++;
}else if(ptr1==arrLen){
ptr2++;
}
}

System.out.println("min: " + min + " second min: "+ minSec)

输出:分钟:1秒分钟:12

正确的输出应该是分钟:1秒分钟:10

我可以用另一种方法解决问题,代码如下。我只需要了解 while 循环方法。

for (int i = 0; i <= arrLen ; i ++)
{
/* If current element is smaller than first
then update both first and second */
if (arr[i] < min)
{
minSec = min;
min = arr[i];
}

/* If arr[i] is in between first and second
then update second */
else if (arr[i] < minSec && arr[i] != min)
minSec = arr[i];
}

最佳答案

因为 ptr2 的值为 0,直到循环到达结束

if(ptr1==arrLen && arr[ptr2]<minSec && arr[ptr2]>min){
minSec=arr[ptr2];
ptr2++;
}

并仅输入 if 条件 ptr1==arrLen 然后选择 minSec 值作为 minSec=arr[ptr2]。没有必要把这个条件放在这里。

所以第二个 if 条件就像

if(arr[ptr2]<minSec && arr[ptr2]>min){
minSec=arr[ptr2];
ptr2++;
}else{
ptr2++;
}

关于java - 在 while 循环中运行多次迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40522361/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com