2015-08-24 2 views
-1

Получение второго наивысшего и второго нижнего java без использования сортировки массива или любого метода сортировки, min_value и max_value только для цикла, и если оператор, который я уже начал кодировать, это то, что я сделал до сих пор я не могу думать о том, как я могу получить второй самый низкий и второй самый высокийПолучение второго наивысшего и второго нижнего java

package Lab2; 

import java.util.Scanner; 

public class hehe { 

    public static void main(String[] args) { 
     int fh, sh, fl, sl, x; 
     Scanner s = new Scanner(System.in); 
     System.out.print("Enter 5 numbers: "); 
     x = fh = sh = sl = fl = s.nextInt(); 
     int a,b,c,d; 
     int mid = 0; 
     for (int i = 0; i < 4; ++i) { 
      int n = s.nextInt(); 
      if (fh < n) { 
       fh = n; 
      } 
      if (fl > n) { 
       fl = n; 
      } 
      for(int y=0;y<5;y++){ 

      } 
     } 

     System.out.println("The First highest is: " + fh); 
     System.out.println("The Second highest is: " + sh); 
     System.out.println("The Second lowest is: " + sl); 
     System.out.println("The First lowest is: " + fl); 
     System.out.println(mid); 
    } 
} 
+0

В вашем случае проще поставить свои значения в массив и сортировать его. – talex

+0

Я не могу использовать массив ха-ха, мой профессор не разрешит мне – Presmelito

ответ

0
 if (fh < n) { 
         sh = fh; 
         fh = n; 
        }else if (sh < n) 
          { 
          sh = n; 
          } 
     if (fl > n) { 
         s1=f1 
         fl = n; 
        }else if (s1 > n) 
         { 
          s1 = n; 
         } 
+0

Я пробовал, и он работает Спасибо Большое спасибо bro – Presmelito

+0

На самом деле это не так. Но идентификатор проблемы в вашем коде. Попробуйте ввести 1 2 3 4 5 в качестве входных данных. – talex

+0

Я не буду работать правильно, когда я попытался ввести 5 первых, а затем 4, -2 -2 1 выход был 5 5 -2 -2 – Presmelito

2

Просто улучшить ваше состояние, чтобы охватить все случаи,

// Initialize your variables like this, 
fh = sh = Integer.MIN_VALUE; 
fl = sl = Integer.MAX_VALUE; 

// Change your for loop condition to below and get input only inside the loop. Not before it. 
for (int i = 0; i < 5; ++i) { 

if (fh < n) { // It means you have received the highest known number 
    sh = fh; // The existing highest becomes the second highest now 
    fh = n; // n should now be the (first) highest rightfully 
} else if (sh < n) { // This means n was not the highest, but second highest 
    sh = n; 
} 

// Do the same for lowest also. 
+0

Спасибо, что старайся это сделать. – Presmelito

+0

Спасибо, братец, отлично работает. – Presmelito

+0

Bro я обнаружил некоторую ошибку, что он не будет работать правильно, когда вы вводите первый вход как самое высокое значение, например, я ввел сначала 5, а затем 4, -2 -2 1 выход будет 5 5 1-2 – Presmelito

0

Вам необходимо также обновить значение переменной соответственно:

public static void main(String[] args) { 
     int fh, sh, fl, sl, x; 
     Scanner s = new Scanner(System.in); 
     System.out.print("Enter 5 numbers: "); 
     x = fh = sh = sl = fl = s.nextInt(); 
     int a,b,c,d; 
     int mid = 0; 
     for (int i = 0; i < 4; ++i) { 
      int n = s.nextInt(); 
      if (fh < n) { 
       sh = fh; // We have got new fh so sh is old value of fh. 
       fh = n; 
      } 
      if (fl > n) { 
       sl = fl; 
       fl = n; 
      } 
     } 

     System.out.println("The First highest is: " + fh); 
     System.out.println("The Second highest is: " + sh); 
     System.out.println("The Second lowest is: " + sl); 
     System.out.println("The First lowest is: " + fl); 
    } 
1

Очевидно, что сортировка массива является очевидным решением, поэтому я предполагаю, что это своего рода тестовое задание. Во всяком случае, я думаю, что самый простой способ - просто иметь переменные как для самого высокого, так и для второго уровня (и для самого низкого). Например, чтобы найти 2-й самый высокий:

List<Integer> values = new ArrayList<>(); 
for(int i = 0; i < 20; i++) { 
    values.add((int) (Math.random() * 10)); 
} 

int highest = Integer.MIN_VALUE; 
int second = Integer.MIN_VALUE; 

for(int n: values) { 
    if(n > highest) { 
     second = highest; 
     highest = n; 
    } else if(n > second) { 
     second = n; 
    } 
} 
System.out.println("2nd highest: " + second); 
+0

Я ценю вашу помощь, но я не могу использовать массив, и что integer.min_value im beginner мне не разрешено использовать те haha ​​ – Presmelito