2016-06-05 5 views
-3

학교 프로젝트의 배열에서 문자열을 정렬해야합니다. 선생님은 array, sort() 사용을 허용하지 않습니다. 2 가지 정렬 방법을 사용해야하지만 너무 잘 작동하지 않습니다.배열에서 문자열을 사전 순으로 정렬합니다. Java

첫 번째 값은 각 값의 두 배를 반환합니다. 즉 John, jack, adam, tom은 adam, adam, jack, jack, john, john, tom, tom을 반환합니다.

public static void bubbleSort() { 
     inputFileNames(); 
     for (int i = size - 1; i >= 0; i--) { 
      for (int j = 0; j <= i; j++) { 
       if (stArr[j].compareTo(stArr[j+1])>0) { 
        temp = stArr[j]; 
        stArr[j] = stArr[j + 1]; 
        stArr[j + 1] = temp; 
       } 
      } 
     } 
     display("The names are: "); 
     System.out.println(""); 
    } 

입력 및 표시 :

static void display(String heading) { 
    System.out.println(heading + "\n"); 
    for (int i = 0; i < size; i++) { 
     System.out.println(stArr[i]); 
    } 
} 

static void inputFileNames() { 
    try { 
     Scanner scFile = new Scanner(new File("Names.txt")); 
     while (scFile.hasNext()) { 
      stArr[size] = scFile.nextLine(); 
      size++; 
     } 
    } catch (FileNotFoundException ex) { 
     System.out.println("File not found."); 
    } 
} 
+1

'display()'를 볼 수 있습니까? 중복 오류가있을 가능성이 큽니다. Java의 배열은 고정 길이이므로 알고리즘이 버그가 있어도 배열에 두 배나 많은 항목이있는 것은 당연합니다. –

+1

'inputFileNames()'는 이름을 두 번 읽을 수 있으므로 함께 정렬됩니다. – Xen

+0

아니면 그렇습니다. 따라서 배열을 디버거에서 정렬 /보기 전에 게시하고 배열의 내용을 출력하십시오. –

답변

1
/* package codechef; // don't place package name! */ 

import java.util.*; 
import java.lang.*; 
import java.io.*; 

/* Name of the class has to be "Main" only if the class is public. */ 
class Codechef 
{ 
public static void main (String[] args) throws java.lang.Exception 
{ Scanner sc = new Scanner(System.in); 
    int n = sc.nextInt(); 
    int i,j; 
    String[] stArr = new String[n]; 
    for(i=0;i<n;i++) 
    { 
     stArr[i]=sc.next(); 
     // System.out.println(stArr[i]); 
    } 
    //inputs list of names from a file. 
    for (i = 0; i < n ; i++) { 
     for (j = i+1 ; j < n; j++) { 
      if (stArr[i].compareTo(stArr[j])>0) 
      { 
       String temp = stArr[i]; 
       stArr[i] = stArr[j]; 
       stArr[j] = temp; 
       // System.out.println(stArr[i]); 
      // System.out.println(stArr[j]); 
      } 
     } 
    } 

    for(i=0;i<n;i++) 
    { 
     System.out.println(stArr[i]); 
    } 


    // your code goes here 
} 
} 

이 먼저 코드에 대한 답변입니다

public static void sort() { 
     inputFileNames();//inputs list of names from a file. 
     for (int i = 0; i < size - 1; i++) { 
      for (int j = i + 1; j < size; j++) { 
       if (stArr[i].compareTo(stArr[j])>0) { 
        temp = stArr[i]; 
        stArr[i] = stArr[j]; 
        stArr[j] = temp; 
       } 
      } 
     } 
     display("The names are: ");// method to display array 
     System.out.println(""); 
    } 

두 번째 종류의

는 '실행 아무튼. 나는 당신이 당신의 입력 방법을 사용해야하기 때문에 파일 처리에 좋지 않다. 나는 왜 스캐너를 사용했는지 알고 있습니다.

두 번째 예제에서 j 루프가 잘못되었습니다 (j = 0; j < = i-1; j ++). 그리고 문제가 해결되면 응답으로 표시하십시오.

+0

답변 주셔서 감사합니다. 그러나 선생님이 array.sort() – Gmancat

관련 문제