0

问题是 :

编写一个程序,提示用户输入 5 个数字并找出其中最大的两个。如果用户输入的数字大于 100 或小于 – 100,程序应该退出。

Hint: use break.

我的代码是:

import java.util.*;

public class q2 {
    static Scanner scan = new Scanner (System.in);
    public static void main (String[] args ) {

        int num;
        int max=0;//define Maximum value and save it in variable max = 0;
        int secondMax=0;//define the second maximum value and save it in variable secondMax = 0;

        System.out.println("Please , Enter 5 numbers between 100 and -100 "); //promet user to enter 5 numbers with the condition

        for (int count=0 ; count<5 ; count++) // start loop with (for) 
        {
            num = scan.nextInt();//user will enter number it will be repeated 5 times .

            if( num > 100 || num<-100) //iv the user enter a number less than -100 or geater than 100 program will quit from loop
            {
                System.out.println("The number you have entered is less than -100 or greater than 100 ");//telling the user what he did
                break;//End the loop if the condition ( num > 100 || num<-100) is true .
            }
            if(num>max )//Another condition to find the maximum number
                max = num;//if so , num will be saved in (max)

            if (num >= secondMax && num < max)// A condition to find the second Maximum number
                secondMax = num;//And it will be saved in (secondMax)
        }//End loop
        System.out.println("The largest value is " + max); //Print the largest number
        System.out.println("The second largest value is " + secondMax );//print the second largest number .
    }//End main

}//End class

这是我的代码输出:

Please , Enter 5 numbers between 100 and -100 
20
30
60
20
-10
The largest value is 60
The second largest value is 20

第二大数字不正确 - 20,而不是 30。我做错了什么?

4

4 回答 4

3

可能有两种情况,

  1. 你发现新的最大值,在这种情况下,更新 secondmax 并将这个 num 设置为 max
  2. 你找到新的 SecondMax,只更新 secondmax

尝试这个

if(num>secondMax&&num<max)   // case 2
{
    secondMax = num
} 
else if(num>max)   // case 1
{
    secondMax = max;
    max = num;
}
于 2013-11-04T18:54:48.750 回答
0

如果将最大的数字替换为更高的数字,则前者最大的数字将变为第二大数字(因为它仍大于前者的第二大数字)。您的代码没有反映这一点。每次更改最大的数字时,将第二大的设置为旧的最大的。

于 2013-11-04T18:55:51.517 回答
0
 if(num>max )//Another condition to find the maximum number
 secondMax = max;
  max = num;//if so , num will be saved in (max)

 else if (num >= secondMax)// A condition to find the second Maximum number
 secondMax = num;//And it will be saved in (secondMax)
于 2013-11-04T18:57:03.417 回答
0

在最大数量更改的情况下,首先保存先前的最大值而不是分配新的最大值,否则如果第二个最大值小于该数量,则应调整第二个最大值。

if(num>max ){//Another condition to find the maximum number
   secondmax = max;
   max = num;//if so , num will be saved in (max)
} else if (num > secondmax) {
   secondmax = num;
}
于 2013-11-04T18:57:32.847 回答