2015-09-28 3 views
1

Я должен реализовать программу, используя Stack, которая позволяет пользователю вводить положительное целое число, n, а затем n целые числа. Затем программа должна позволить пользователю вводить другое целое число, val, после чего программа должна отображать последнее значение, которое больше val. Из моего понимания программы я понял, что он должен сравнивать каждый элемент с вершины стека с val. Поэтому для сравнения каждого элемента с val, он должен перебирать значения в стеке, начиная с вершины. Я действительно не знаю, как сделать эту работу, поэтому было бы приятно, если бы я мог получить любую помощь. Вот моя программа:Stack: Как проверить каждое целое число (в цикле) на другое целое число?

public class MyClass{ 

    public static void main(String[] args) { 

     Scanner sc= new Scanner(System.in); 

     Stack<Integer> NumsInStack= new Stack<Integer>(); 

     int n, num, val; 
     System.out.println("Please enter n."); 
     n=sc.nextInt(); 

     for(int i=0; i<n;i++){ 
      num=sc.nextInt(); 
      NumsInStack.push(num); 
     } 

     System.out.println("Enter a value."); 
     val=sc.nextInt(); 

     for(int i=0; i<NumsInStack.size();i++){ 
      if(NumsInStack.peek()>val) 
       System.out.println("The number greater than "+val+" is "+NumsInStack.peek()); 
     } 
    } 
} 
+0

Что происходит, когда вы запускаете программу? Что говорит вам отладчик? – CPerkins

+0

Stack реализует итеративный интерфейс. Получите экземпляр итератора и повторите его. –

+0

@CPerkins Это не работает, так как мой код просто проверяет, является ли последний элемент больше, чем 'val'. Если это не так, оно завершается там вместо проверки других элементов сверху и видно, больше ли это того, что 'val' – Tia

ответ

1

Вы никогда не должны перебирать стопку, он побеждает всю цель выбора такой структуры данных. Вы хотите использовать pop и peek:

while (!NumsInStack.empty()) { 
    if (NumsInStack.peek() > val) { 
     System.out.println("woot!"); 
     break; 
    } 
    NumsInStack.pop(); 
} 

Поскольку вы только хотите, чтобы распечатать последний номер, который выше, вы должны также положить break; после заявления печати так, что она разразится из цикла, когда его находит совпадение. Без перерыва он будет печатать все значения, которые выше.

1

Рабочий код:

import java.util.*; 

public class MyClass { 

    public static void main(String[] args) { 

     Scanner sc = new Scanner(System.in); 

     Stack<Integer> NumsInStack = new Stack<Integer>(); 

     int n, num, val; 
     System.out.println("Please enter n."); 
     n = sc.nextInt(); 

     for (int i = 0; i < n; i++) { 

      num = sc.nextInt(); 
      NumsInStack.push(num); 

     } 

     System.out.println("Enter a value."); 
     val = sc.nextInt(); 

     while (!NumsInStack.empty()){ 
      int stackElement = NumsInStack.pop(); 
      if ( stackElement > val){ 
       System.out.println("Stack Element > value :"+stackElement+":"+val); 
       break; 
      } 
     } 

    } 
} 
Смежные вопросы