2016-04-22 5 views
0

現在、スタックを受け取り、そのスタックを通過してすべての偶数を新しいスタックに追加してから、新しいスタックを返す必要があります。たとえば、スタックに1,3,4,5,7,8,10が含まれている場合、新しいスタックはそれを追加した後に4,8,10しか含まれません。これまでのところ私のコードですが、それらを渡すように見えません。前もって感謝します!ここでプッシュとポップを使用するスタック

public class StackExample { 
public static Stack<Integer> getEvenNumbers(Stack<Integer> stack) { 
Stack<Integer> a = stack; 
Stack<Integer> c = new Stack<Integer>(); 
System.out.println(length(stack)); 
if(length(stack)==1) 
{ 
    return stack; 
} 
while (!(a.isEmpty())) { 
    int num = a.pop(); 
    if (num % 2 == 0) { 
     c.push(num); 
    } else { 

    } 
} 
System.out.println(c.isEmpty()); 
return c; 
} 

はテストです:

import static org.junit.Assert.*; 

import java.lang.reflect.Field; 

import org.junit.Test; 

public class StackExampleTest { 
private class StackTest extends Stack<Integer> { 
    public StackTest(int[] values) { 
     for (int i = values.length-1; i > -1; i--) { 
      push(values[ i ]); 
     } 
    } 
} 
@Test 
public void testReflection() { 
    Class<?> iClass = StackExample.class; 
    Field[] iFields = iClass.getDeclaredFields(); 

    for (Field f : iFields) { 
     if (!f.isSynthetic()) { 
      fail("Class shouldn't have any fields [found: \""+f.getName()+"\"]"); 
     } 
    } 
} 
@Test 
public void testEmpty() { 
    int[]   input = new int[]{ }; 
    Stack<Integer> stack = new StackTest(input); 
    Stack<Integer> result = StackExample.getEvenNumbers(stack); 

    assertTrue("result should be empty", result.isEmpty()); 
    assertTrue("stack should be empty", stack .isEmpty()); 
    assertTrue("stack and result cannot be the same object", stack != result); 
} 
@Test 
public void test1Odd() { 
    int[]   input = new int[]{ 5 }; 
    Stack<Integer> stack = new StackTest(input); 
    Stack<Integer> result = StackExample.getEvenNumbers(stack); 

    assertTrue("result should be empty", result.isEmpty()); 

    for (int expected : input) { 
     if (stack.isEmpty()) 
      fail("\"stack\" empty: '"+ expected +"' expected"); 
     else { 
      int actual = stack.pop(); 
      assertEquals("incorrect result", expected, actual); 
     } 
    } 
    assertTrue("stack and result cannot be the same object", stack != result); 
} 
@Test 
public void test1Even() { 
    int[]   input = new int[]{ 4 }; 
    Stack<Integer> stack = new StackTest(input); 
    Stack<Integer> result = StackExample.getEvenNumbers(stack); 

    for (int expected : new int[]{ 4 }) { 
     if (result.isEmpty()) 
      fail("\"result\" empty: '"+ expected +"' expected"); 
     else { 
      int actual = result.pop(); 
      assertEquals("incorrect result", expected, actual); 
     } 
    } 
    for (int expected : input) { 
     if (stack.isEmpty()) 
      fail("\"stack\" empty: '"+ expected +"' expected"); 
     else { 
      int actual = stack.pop(); 
      assertEquals("incorrect result", expected, actual); 
     } 
    } 
    assertTrue("stack and result cannot be the same object", stack != result); 
} 
@Test 
public void testNoneEven() { 
    int[]   input = new int[]{ 9, 77, 3, 5, 11 }; 
    Stack<Integer> stack = new StackTest(input); 
    Stack<Integer> result = StackExample.getEvenNumbers(stack); 

    assertTrue("result should be empty", result.isEmpty()); 

    for (int expected : input) { 
     if (stack.isEmpty()) 
      fail("\"stack\" empty: '"+ expected +"' expected"); 
     else { 
      int actual = stack.pop(); 
      assertEquals("incorrect result", expected, actual); 
     } 
    } 
    assertTrue("stack and result cannot be the same object", stack != result); 
} 
@Test 
public void testSomeEven() { 
    int[]   input = new int[]{ 44, 77, 8, 3, 5, 12 }; 
    Stack<Integer> stack = new StackTest(input); 
    Stack<Integer> result = StackExample.getEvenNumbers(stack); 

    for (int expected : new int[]{ 44, 8, 12 }) { 
     if (result.isEmpty()) 
      fail("\"result\" empty: '"+ expected +"' expected"); 
     else { 
      int actual = result.pop(); 
      assertEquals("incorrect result", expected, actual); 
     } 
    } 
    for (int expected : input) { 
     if (stack.isEmpty()) 
      fail("\"stack\" empty: '"+ expected +"' expected"); 
     else { 
      int actual = stack.pop(); 
      assertEquals("incorrect result", expected, actual); 
     } 
    } 
    assertTrue("stack and result cannot be the same object", stack != result); 
} 
@Test 
public void testAllEven() { 
    int[]   input = new int[]{ 12, 22, 6, 14, 12 }; 
    Stack<Integer> stack = new StackTest(input); 
    Stack<Integer> result = StackExample.getEvenNumbers(stack); 

    for (int expected : input) { 
     if (result.isEmpty()) 
      fail("\"result\" empty: '"+ expected +"' expected"); 
     else { 
      int actual = result.pop(); 
      assertEquals("incorrect result", expected, actual); 
     } 
    } 
    for (int expected : input) { 
     if (stack.isEmpty()) 
      fail("\"stack\" empty: '"+ expected +"' expected"); 
     else { 
      int actual = stack.pop(); 
      assertEquals("incorrect result", expected, actual); 
     } 
    } 
    assertTrue("stack and result cannot be the same object", stack != result); 
} 
} 

答えて

0

スタックが奇数含まれている場合、これはtest1Oddを失敗します。

if(length(stack)==1) 
{ 
    return stack; 
} 

この最適化をあきらめたり、それも要素が含まれているかどうかを確認のいずれかを。

関連する問題