2017-11-02 44 views
0

안녕하세요. 저는 모두 초보 프로그래머입니다. 나는 내 수업에 대해 다음 코딩 프롬프트 작업입니다 : 당신의 임무는 다음과 같은 서명하는 방법을 작성하는 것입니다 :내 배열에서 Java 코드의 특정 요소를 제거하는 방법

public static String[] removeFromArray(String[] arr, String toRemove) 

어떤없이 제외하고, 편곡 같은 내용이있는 문자열 배열을 반환해야하는 방법 toRemove 문자열이 발생했습니다. 예를 들어, 만약 당신의 방법은 (는) 다음과 같은 출력을 생성해야

String[] test = {“this”, “is”, “the”, “example”, “of”, “the”, “call”}; 
String[] result = removeFromArray(test, “the”); 
System.out.println(Arrays.toString(result)); 

아래의 코드에 의해 호출됩니다

[this, is, example, of, call] 

참고 : 귀하의 방법은 테스트 프로그램에 의해 편곡과 toRemove에 대한 값을 전달합니다 - 은 사용자의 메서드 내에서이 값들을 읽지 않아야합니다. 또한 크레딧을 받으려면 위에 요청한 서명이있는이 메서드를 작성해야합니다. 메서드를 호출하는 코드를 작성할 필요가 없으며 메서드 자체 만 호출하면됩니다. 힌트 : 배열을 만들 때 배열의 길이를 지정해야하므로 을 입력 배열을 통해 두 개의 루프로 만들 필요가 있습니다. toRemove 문자열의 발생 횟수를 계산하려면
을 만들 수 있습니다. 적절한 크기의 새 배열과 다른 모든 문자열을 새 배열에 복사하는 두 번째.

코드에서 작동하는 모든 것이 있지만 새 배열을 인쇄해야하는 마지막 부분이 작동하지 않습니다. 작게 만들어서 인쇄 할 수 있지만 그 부분을 가져올 수는 없습니다. 일하다. 나는 널 (null)을 제거해야한다는 것을 알고 있지만, 어떻게해야할지 모르겠다. 또한 내 코드는 내가 가지고있는 테스트 케이스가 아닌 모든 배열에서 작동해야한다. 도움이나 조언이 정말 좋을 것입니다. 대단히 감사합니다 !!! :) 여기 내 코드입니다 :

public static void main(String[] args) { 
    String[] test = {"this", "is", "the", "example", "of", "the", "call"}; 
    String[] remove = removeFromArray(test, "the"); 
    System.out.println(Arrays.toString(remove)); 
} 

public static String[] removeFromArray(String[] arr, String toRemove) { 
    int count = 0; 
    for (int i = 0; i < arr.length; i++) { 
     if (arr[i].equals(toRemove)) { 
      count++; 
     } 
    } 

    String[] result = new String[arr.length - count]; 
    //for (int i = 0; i < arr.length; i++) { 
    // if(!arr[i].equals(toRemove)){ 
    // result[].equals(arr[i]); 
    //} 

    //} 
    return result; 
} 
+1

*** ... "하지 않는 만들 것이다, 자바 8 개 스트림이 있습니다 작품 "***이게 무슨 뜻이야? exploiding입니까? 뭔가 다른 것을 인쇄하고 있습니까? –

+1

['System.arraycopy'] (https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#arraycopy-java.lang.Object-int-java.lang.Object -int-int-) – MadProgrammer

+0

@MadProgrammer, 제목 자체의 대답은'System.arraycopy'입니다. 그러나 내용은 제목과 관련이 없습니다. – Alex

답변

1

당신이 마지막에 할 대신 result[].equals(arr[i]);

result[i] = arr[i] ;를 사용해야을 yor가 잘못된 emthod로 새로운 배열을 할당하려고하는 주석 코드처럼 보이는, 괜찮아 보이는 :

String[] result = new String[arr.length - count]; 
int k = 0; 
for (int i = 0; i < arr.length; i++) { 
    if(!toRemove.equals(arr[i])){ 
     result[k] = arr[i]; 
     k++; 
    } 

} 
return result; 
+1

선생님, 제 생각에 toRemove.equals (arr [i])는 다음과 같습니다. ! arr [i] .equals (toRemove)에 대한 더 나은 대안! – Yash

0

귀하의 마지막 부분은 하나 배열 하나에 값을 할당해야합니다. 당신이 접근

int j = 0; 
for (int i = 0; i < arr.length; i++) { 
    if(!toRemove.equals(arr[i])){ 
     result[j++] = arr[i]; 
    } 
} 
0

주어진 단어를 제외하는 새 문자열 배열을 반환 해 주시기 바랍니다. 배열을 반복하고 주어진 단어와 같지 않은 단어를 추가하십시오.

public static String[] removeFromArray(String[] arr, String toRemove){ 
    ArrayList<String> words = new ArrayList<>(); 
    for(String s : arr) 
     if(!s.equals(toRemove)) 
      words.add(s); 
    return words.toArray(new String[0]); 
} 

배열 크기를 만들면 변경할 수 없으므로 ArrayList를 사용하여 단어를 저장 한 다음 배열로 반환하십시오.

+0

정말 고마워요 !!! 정말 도움을 주셔서 감사합니다 !! 나는 그것이 단순해야만한다는 것을 알았다. 정말 고맙습니다!! 멋진 밤 되세요! – TwilightLuigi

+0

@ TwilightLuigi 내 솔루션이 도움이된다면 내 대답을 수락 할 수 있습니다. – user3437460

0

나는 프로그래밍에 익숙하지 않으므로 주어진 솔루션은 완벽합니다.

그러나 자바를 사용하면 일반적으로 라이브러리를 사용하게됩니다. 이 경우 컬렉션 라이브러리.자바 (8)을 사용하는 경우, 이것은 당신이 어떻게 할 것입니다 :

public static String[] removeFromArray(String[] arr, String toRemove) { 
    // create a List and fill it with your items 
    ArrayList<String> list = new ArrayList(); 
    Collections.addAll(list, arr); 

    // remove the items that are equal to the one to be removed 
    list.removeIf(s -> toRemove.equals(s)); 

    // transfer back to array 
    return list.toArray(new String[list.size()]); 
} 

을 그리고,이

public static String[] removeFromArray(String[] arr, String toRemove) { 
    return Arrays.stream(arr)    // create stream from array 
     .filter(s -> !toRemove.equals(s)) // filter out items 
     .toArray(String[]::new);   // create array from stream 
}