2014-02-09 5 views
-2

배열이 있습니다. int[] myArray = new int[] { A, B, C, D, E }; a, b, c, d, e는 이전 코드의 6,4,5,1,1 값으로 무작위로 설정됩니다.Java - 임의의 값 목록을 정수 배열로 검색합니다.

IF 배열에 6, 5 또는 4가 포함되어 있습니다. 먼저 6, 5, 4가 있어야합니다. 배열에 6,4가 있으면, 1,2,1, 그러면 나는 단지 6을 찾아야 만합니다. 나는 5없이 4를 사용할 수 없습니다. 배열이 6,1,2,1,5로 설정되어 있다면 6과 5가 필요합니다.

배열의 "found"숫자 (6,5,4)를 변수에 넣고 콘솔에 출력해야합니다.

생각, 아이디어, 자습서가 도움이 될 수 있습니까?

답변

1
public class Filterable<T> { 

    private List<T> source 

    public Filterable(List<T> aSource) { source = aSource; } 

    public List<T> filter(Filter<T> aFilter) { 
     List<T> dest = new ArrayList<T>(); 
     for(T current : source) { 
      if(filter.contains(current)) { 
       dest.add(current); 
      } 
     } 
     return dest; 
    } 

    public static void main(String[] args) { 
     String message = "V ubcr guvf vfa'g ubzrjbex orpnhfr "; 
     message += "V tbg vg bss fgnpxbiresybj: "; 
     message += "uggc://fgnpxbiresybj.pbz/dhrfgvbaf/21664702/wnin-frnepu-na-vagrtre-neenl-sbe-yvfg-bs-enaqbz-inyhrf"; 

     Filterable f1 = new Filterable(Arrays.asList(6, 4, 1, 1, 2)); 
     Filterable f2 = new Filterable(Arrays.asList(6, 3, 1, 5, 4)); 
     Filterable f3 = new Filterable(Arrays.asList(6, 4, 1, 6, 5, 4)); 

     List<Integer> r1 = f1.filter(new OrderedFilter(6, 5, 4)); 
     List<Integer> r2 = f2.filter(new OrderedFilter(6, 5, 4)); 
     List<Integer> r3 = f3.filter(new OrderedFilter(6, 5, 4)); 

     print(r1); 
     print(r2); 
     print(r3); 
     System.out.println(rot13(message)); 
    } 

    public static void print(List<Object> r1) { 
     boolean first = true; 
     for(Object o : r1) { 
     if(!first) System.out.print(", "); 
     System.out.printf("%s", o); 
     first = false; 
     } 
     System.out.println(); 
    } 

    public static String rot13(String input) { 
     StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < input.length(); i++) { 
     char c = input.charAt(i); 
     if  (c >= 'a' && c <= 'm') c += 13; 
     else if (c >= 'A' && c <= 'M') c += 13; 
     else if (c >= 'n' && c <= 'z') c -= 13; 
     else if (c >= 'N' && c <= 'Z') c -= 13; 
     sb.append(c); 
     } 
     return sb.toString(); 
    } 
} 

public interface Filter<T> { 
    public boolean contains(T object); 
} 

public OrderedFilter implements Filter<T> { 
    private T[] lookForThese; 
    private int currentMatch = 0; 

    public OrderedFilter(T... values) { 
     lookForThese = values; 
    } 

    public boolean contains(T current) { 
     if(currentMatch >= lookForThese.length) return false; 
     if(lookForThese[currentMatch].equals(current)) { 
     currentMatch++; 
     return true; 
     } 
     return false; 
    } 
} 
+0

와우 ... 그 많은 세부입니다 감사합니다. 이 배열에서 읽는 방법을 볼 수 없습니다. 내 배열은 무작위로 5 번 반복되는 루프를 사용하여 채워집니다. rand = new Random(); int a = (int) (6 * rand.nextDouble() + 1); 이 논리를 사용하면 어떤 실행이 생성되는지 예측할 수 없습니다. 배열에 6,5 또는 4가 포함되어 있는지 확인하기 위해 배열을 읽어야합니다. 감사합니다. – RazorSharp

+0

인쇄 할 수 있도록 사전 정의 된 순서로 원래 배열에서 찾은 번호가 필요하다는 질문을 지정했습니다. 그러므로 그게 당신이 가진 것입니다. 귀하의 의견은 당신이 완전히 다른 것을 필요로한다고 말합니다. 어쨌든 Filterable 클래스를 사용하는 방법의 예로서 main 메소드로 시작하십시오. 루프는 filter() 메소드에 있습니다. 그것은 3 클래스입니다. 당신이 그것을 완전히 이해하지 못한다면 당신은 그것을 실행할 수 있습니다. – chubbsondubs