2017-11-28 2 views
-3

하나의 배열로 결합하려고하는 두 개의 문자열 배열이 있습니다. 두 배열은 알파벳 순서입니다. 알파벳 순서로 조합해야합니다. 이 작업을 시도한 방법은 결합 된 목록을 첫 번째 목록 다음에 두 번째 목록으로 작성한 다음 정렬하는 것입니다. 불행히도, 수업 강사는 compareTo 메소드를 사용하여 하나의 단계로 결합하고 정렬하길 원한다고 말합니다. 아래 코드는 어떻게 구현합니까? 단두 개의 문자열 배열을 알파벳순으로 조합하십시오.

목록 1 = { "알프레드", "베브", "칼", " 처음 두 배열은 사용자 그래서 예를 들어, 널로서 나머지 최대 10,000 단어 알파벳 순서로 값을 입력되고 "널 등)

리스트 2 = {"밥 ","크레이그 ","딘 ","프랜 "등, 널 (null))

목록 3 목표 : {"알프레드 ","베브 " "밥", "칼", 크레이그 ","댄 ","딘 " "프랜 "}

for (int b = 0; b < list3.length; b++)//adds list1 to merged array 
    { 
     if (list1[b] != null) { 
      list3[b] = list1[b]; 
      f++; 
     } 

    } 
    int x = 0; 
    for (int y = f; y < list3.length; y++)//adds list2 to merged array 
    { 
     if (list2[x] != null) { 
      list3[y] = list2[x]; 
      x++; 
     } 
    } 

    for (int q = 0; q < list3.length; q++)//Merged array in alphabetical order 
    { 
     if (list3[q] != null) { 
      for (int b = q; b < list3.length; b++) { 
       if (list3[b] != null) { 
        if (list3[q].compareTo(list3[b]) > 0) { 
         String s = list3[q]; 
         list3[q] = list3[b]; 
         list3[b] = s; 

        } 

       } 
      } 
     } 

    } 

Stack Exchange를 처음 사용하기 때문에 모든 항목의 형식이 올바르게 지정되었습니다. 죄송합니다.

+0

부족이 따를 코드가 매우 어렵습니다. – shmosel

+0

목록 1을 추가하고 목록 2를 추가 한 다음 집계 목록을 정렬하는 이전 코드를 본 것처럼 보입니다. "하나의 단계로 결합 및 정렬"하도록 작성한 코드는 어디에 있습니까? – jarmod

+0

StackOverflow에 오신 것을 환영합니다. 답변/질문을 통해 그것을 업 그레 이드하는 데 도움이 되었으면 질문에 답변이있는 경우이를 수락 한 것으로 표시하십시오. –

답변

0

동시에 병합하고 정렬하려면 문자열 배열을 포함하는 클래스에 InsertionSort를 구현할 수 있습니다 (새 배열을 추가하거나 크기를 늘리면 크기가 커집니다)).

귀하의 단계는 다음과 같은 : 다음 종류의 병합에

start with a array of lenght = list1.lenght + list2.lenght (called result here) 
for each value on list1 and list2 
compare if its lesser of the first element on the result array 
if it is, add it before it and swap all list to the next position 
if it is not, compare to the second and insert as its place if lesser and so on 

:

Ssorting 사용 Arrays.sort에 (문자열 [])

또한, 당신은 배열의 내용을 복사 할 수 있습니다 System.arraycopy 메서드를 사용합니다.

다음
String[] list3 = new String[list1.lenght + list2.lenght]; 
System.arraycopy(list1, 0, list3, 0, list1.lenght); 
System.arraycopy(list2, 0, list3, list1.lenght, list2.lenght); 
Arrays.sort(list3); 

목록 3은 당신이 원하는 결과가 있습니다

귀하의 코드는 다음과 같이 간단 할 수 있습니다.

0

컬렉션을 사용할 수 있다고 제공하면 다음과 같이 트릭을 수행 할 수 있습니다. 컬렉션을 사용할 수없는 경우 알려 주시면 대체 솔루션을 제공 할 것입니다.

String[] array1 = new String[] { "Alfred", "Bev", "Carl", "Dan" }; 
    String[] array2 = new String[] { "Bob", "Craig", "Dean", "Fran" }; 

    List<String> list1 = Arrays.asList(array1); 
    List<String> list2 = Arrays.asList(array2); 

    List<String> combined = new ArrayList<String>(); 
    combined.addAll(list1); 
    combined.addAll(list2); 

    System.out.println("Unsorted list: "+ combined.toString()); 

    Collections.sort(combined); 

    System.out.println("Sorted list: "+ combined.toString()); 

출력 : 들여 쓰기

Unsorted list: [Alfred, Bev, Carl, Dan, Bob, Craig, Dean, Fran] 

Sorted list: [Alfred, Bev, Bob, Carl, Craig, Dan, Dean, Fran] 
관련 문제