Java 无法使用不带数组的while循环显示第三大数字

Java 无法使用不带数组的while循环显示第三大数字,java,while-loop,Java,While Loop,我的代码要求用户输入三个数字,它应该显示您输入的第三个数字。我已经对这段代码进行了至少一个小时的故障排除,但是没有用 import java.util.Scanner; public class thirdLargest { public static void main(String[] args) { Scanner input = new Scanner(System.in); int largest = 0; int secon

我的代码要求用户输入三个数字,它应该显示您输入的第三个数字。我已经对这段代码进行了至少一个小时的故障排除,但是没有用

import java.util.Scanner;

public class thirdLargest {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int largest = 0;
        int secondLargest = 0;
        int thirdLargest = 0;

        int counter = 0;
        int number;

        while (counter < 4) {
            System.out.println("Enter a number");
            number = input.nextInt();

            if (number > largest) {
                number = largest;
                largest = secondLargest;
            } else if (number > secondLargest) {
                number = secondLargest;
                secondLargest = thirdLargest;

            } else if (number > thirdLargest) {
                thirdLargest = number;
            }
            counter++;
        }
        System.out.println("Third largest number is " + thirdLargest);
    }
}
import java.util.Scanner;
公共类第三大类{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
int最大=0;
int=0;
int thirdLargest=0;
int计数器=0;
整数;
while(计数器<4){
System.out.println(“输入一个数字”);
number=input.nextInt();
如果(数量>最大值){
数量=最大;
最大=第二大;
}else if(数字>第二大){
数量=第二大;
第二大=第三大;
}否则如果(编号>第三大){
第三大=数量;
}
计数器++;
}
System.out.println(“第三大数字是”+thirdLargest);
}
}
这是输出

输入一个数字
99
输入一个数字
88
输入一个数字
77
输入一个数字
66
输入一个数字
55
第三大数字是0

进程已完成,退出代码为0

试一试

1) 将用户输入存储在int的ArrayList中

2) 使用Collection.sort(yourList)对数组进行排序

3) 打印列表中的第一个元素。获取(0)

publicstaticvoidmain(字符串[]args){
扫描仪输入=新扫描仪(System.in);
整数;
ArrayList al=新的ArrayList();

对于(inti=0;i我相信下面的代码可以使用您的逻辑工作,而不使用数组

import java.util.Scanner;

public class thirdLargest {

public static void main(String[] args) {
    Scanner input=new Scanner(System.in);
    int largest=0;
    int secondLargest=0;
    int thirdLargest=0;

    int counter=0;
    int number;

    while(counter<4){
        System.out.println("Enter a number");
        number=input.nextInt();
        if (number > largest){
            thirdLargest = secondLargest;
            secondLargest = largest;
            largest = number;
        }
        else if (number > secondLargest){
            thirdLargest = secondLargest;
            secondLargest = number;
        }
        else if (number > thirdLargest){
            thirdLargest = number
        }

    }

    System.out.println("Third largest number is "+thirdLargest);
}
import java.util.Scanner;
公共类第三大类{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
int最大=0;
int=0;
int thirdLargest=0;
int计数器=0;
整数;
while(柜台最大){
第三大=第二大;
第二大=最大;
最大=数量;
}
else if(数字>第二大){
第三大=第二大;
第二大=数量;
}
否则如果(编号>第三大){
第三大=数字
}
}
System.out.println(“第三大数字是”+thirdLargest);
}

如果用户连续输入较大的数字,
如果(数字>最大值){
将始终为真,这意味着永远不会设置第三大值。我认为您需要重新写入。除了逻辑错误之外,你应该通过调试来弄清楚,你似乎有一半的时间不理解赋值是如何工作的。
number=maximust
更改
number
,而不是
maximust
。maximust也保持在0,没有通过第一个if语句,需要重写。我建议将
System.out.println(计数器+”)+maxist+“”+secondmaxist+“”+thirdLargest);
在您的
计数器之前+
——这将帮助您查看正在发生的事情。您还可以将例如
System.out.println(“if(A)”;
放在每个
if/else块中
。最好使用调试器。学习永远不会太早。
import java.util.Scanner;

public class thirdLargest {

public static void main(String[] args) {
    Scanner input=new Scanner(System.in);
    int largest=0;
    int secondLargest=0;
    int thirdLargest=0;

    int counter=0;
    int number;

    while(counter<4){
        System.out.println("Enter a number");
        number=input.nextInt();
        if (number > largest){
            thirdLargest = secondLargest;
            secondLargest = largest;
            largest = number;
        }
        else if (number > secondLargest){
            thirdLargest = secondLargest;
            secondLargest = number;
        }
        else if (number > thirdLargest){
            thirdLargest = number
        }

    }

    System.out.println("Third largest number is "+thirdLargest);
}