查找Java中第三大否
我对这个简单的程序有点困惑。我必须在数组中找到第三大no。我已经做了一些代码,但在第三大no中只得到第二大no没有问题,因此请建议我这个解决方案的错误:查找Java中第三大否,java,arrays,Java,Arrays,我对这个简单的程序有点困惑。我必须在数组中找到第三大no。我已经做了一些代码,但在第三大no中只得到第二大no没有问题,因此请建议我这个解决方案的错误: class ArrayExample { public static void main(String[] args) { int secondlargest = Integer.MIN_VALUE; int thirdlargest = Integer.MIN_VALUE; int la
class ArrayExample {
public static void main(String[] args) {
int secondlargest = Integer.MIN_VALUE;
int thirdlargest = Integer.MIN_VALUE;
int largest = Integer.MIN_VALUE;
Scanner input = new Scanner(System.in);
System.out.println("Enter array values: ");
int arr[] = new int[5];
for (int i = 0; i < arr.length; i++) {
arr[i] = input.nextInt();
if (largest < arr[i]) {
secondlargest = largest;
largest = arr[i];
}
if (secondlargest < arr[i] && largest != arr[i]) {
thirdlargest = secondlargest;
secondlargest = arr[i];
if (thirdlargest < arr[i] && secondlargest != arr[i])
thirdlargest = arr[i];
}
}
System.out.println("Second Largest number is: " + secondlargest
+ "\nThird largest number is=====" + thirdlargest);
}
}
类数组示例{
公共静态void main(字符串[]args){
int secondmaxist=整数.MIN_值;
int thirdlargest=Integer.MIN_值;
int最大=整数.MIN_值;
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入数组值:”);
int arr[]=新的int[5];
对于(int i=0;i
只需在整个数组中循环,并跟踪最大的三个数字
或者您可以对其进行排序,然后从顶部返回第三个元素。使用java列表,对其进行排序。以第三个元素为例
我想试试这样的方法:
if (largest < ar[i]) {
thirdlargest = secondlargest;
secondlargest = largest;
largest = arr[i];
} else if (secondlargest < ar[i]) {
thirdlargest = secondlargest;
secondlargest = ar[i];
} else if (thirdlargest < ar[i]) {
thirdlargest = ar[i];
}
if(最大
未测试,但我认为第二个IF不再需要
代码说明:
我们正在验证,如果输入的数字大于最大值,则将第三、第二和第一个最大值上移一级。如果输入的值大于第二大值且小于最大值,则将3和2向上移动一级。如果输入的值大于第三大值且小于第二大值,则将第三大值移动到输入的值。一旦读入数组,只需调用数组上的Arrays.sort(array)(在您的情况下是Arrays.sort(arr);)。这将按升序排序,然后您可以检索元素arr.length-2 详情如下: 例如:
Scanner input = new Scanner(System.in);
System.out.println("Enter array values: ");
int arr[] = new int[5];
for (int i = 0; i < arr.length; i++) {
arr[i] = input.nextInt();
}
Arrays.sort(arr);
System.out.println("Second Largest number is: " + arr[4]
+ "\nThird largest number is=====" + arr[3]);
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入数组值:”);
int arr[]=新的int[5];
对于(int i=0;i
用于(int i=0;i
使用整数
数组,然后使用集合对其排序
,只需选择所需的元素:
代码:
因此,现在选择第三个larget编号为list.get(list.size()-3))
还可以对集合进行反向排序。检查它。如果您希望该代码正常工作,我认为问题在于:
if (secondlargest < arr[i] && largest != arr[i]) {
thirdlargest = secondlargest;
secondlargest = arr[i];
if (thirdlargest < arr[i] && secondlargest != arr[i])
thirdlargest = arr[i];
}
if(第二大
问题是您正在将thirdLargest设置为第二大,这已经被确定为小于arr[i]。然后,您将测试thirdLargest是否小于arr[i](在外部条件下,它被设置为第二大),然后将其设置为arr[i]。请尝试删除
if (thirdlargest < arr[i] && secondlargest != arr[i])
thirdlargest = arr[i];
if(第三大
如果这不起作用,尝试添加第三个单独的条件,以涵盖arr[i]小于第二个最大值但大于第三个最大值的情况。(参见上面的Jens回答),类似于:集合API。以下是一个例子:
List list = Arrays.asList(new Integer[] {1, 2, 29, 4, 28, 6, 27, 8});
Collections.sort(list);
System.out.print(list.get(list.size()-3));
if(firstmax尝试此代码
public static void main(String[] args) {
int arr[] = {67, 56, 87, 42};
for (int i = 0; i <arr.length - 1; i++) {
if (arr[i] < arr[i + 1]) {
int swap = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = swap;
}
}
System.out.println("third highest element is: " + arr[2]);
}
publicstaticvoidmain(字符串[]args){
int arr[]={67,56,87,42};
对于(int i=0;ipackage algo;
公共类最大数{
公共静态void main(字符串参数[]){
int arr[]=新的int[]{5,2,3,4,6};
int最大=整数。最小值;;
int secondmaxist=整数.MIN_值;;
int thirdLargest=Integer.MIN_值;;
对于(int i=0;iYou可以简单地对数组进行排序并返回数组[2]
(如果它是降序的)@assylias你是对的,但效率要低得多。老实说,我认为OP并不关心这一点。这是家庭作业吗?如果是-提到它,它将帮助我们更好地引用问题,否则你可能会得到基于更高级算法(排序、选择、最小堆)的解决方案@假设位置1和2的数字是相同的值怎么办?@andycark那么它们仍然是第二和第三大数字!我认为循环是OP尝试的。为什么?如果要排序,请使用Arrays.sort()
。无需创建包装(Integer
)对象和数组,而不是将数组转换为列表。只是想给出一个Collections
答案。另外,OP希望了解集合的简单程度。感谢您的编辑,这是
if (thirdlargest < arr[i] && secondlargest != arr[i])
thirdlargest = arr[i];
List list = Arrays.asList(new Integer[] {1, 2, 29, 4, 28, 6, 27, 8});
Collections.sort(list);
System.out.print(list.get(list.size()-3));
if(firstLargest<array[num])
{
thirdLargest=secondLargest;
secondLargest=firstLargest;
firstLargest = array[num];
}
else if((secondLargest<array[num])&&(array[num]!=firstLargest))
{
thirdLargest=secondLargest;
secondLargest = array[num];
}
else if((thirdLargest<array[num])&&(array[num]!=secondLargest))
{
thirdLargest = array[num];
}
public static void main(String[] args) {
int arr[] = {67, 56, 87, 42};
for (int i = 0; i <arr.length - 1; i++) {
if (arr[i] < arr[i + 1]) {
int swap = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = swap;
}
}
System.out.println("third highest element is: " + arr[2]);
}
package algo;
public class LargestNumbers {
public static void main(String args[]){
int arr[] = new int[]{5,2,3,4,6};
int largest=Integer.MIN_VALUE;;
int secondLargest=Integer.MIN_VALUE;;
int thirdLargest=Integer.MIN_VALUE;;
for(int i=0;i<arr.length;i++){
if(largest<arr[i])
{
thirdLargest=secondLargest;
secondLargest=largest;
largest = arr[i];
}
else if((secondLargest<arr[i])&&(arr[i]!=largest))
{
thirdLargest=secondLargest;
secondLargest = arr[i];
}
else if((thirdLargest<arr[i])&&(arr[i]!=secondLargest))
{
thirdLargest = arr[i];
}
}//for
System.out.println("Numbers are: " + largest + " " + secondLargest
+ "\nThird largest number is=====" + thirdLargest);
}
}