2013-07-06 2 views
4

배열 목록을 정렬할지 (정렬하지 않을지) 추정해야합니다.배열 목록 정렬 여부를 결정합니다.

문자열을 정렬하면 알파벳 순서로 정렬됩니다. compareTo() 메서드를 사용하여 먼저 오는 문자열을 확인하십시오.

배열 목록이 정렬되어 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.

코드 :

public boolean isSorted() 
{ 
    boolean sorted = true;   
    for (int i = 1; i < list.size(); i++) { 
     if (list.get(i-1).compareTo(list.get(i)) != 1) sorted = false; 
    } 

    return sorted; 
} 

쉬운 시험 :

ArrayList<String> animals = new ArrayList<String>(); 
    ArrayListMethods zoo = new ArrayListMethods(animals); 
    animals.add("ape"); 
    animals.add("dog"); 
    animals.add("zebra"); 

    //test isSorted 
    System.out.println(zoo.isSorted()); 
    System.out.println("Expected: true"); 

    animals.add("cat"); 
    System.out.println(zoo.isSorted()); 
    System.out.println("Expected: false"); 

    animals.remove("cat"); 
    animals.add(0,"cat"); 
    System.out.println(zoo.isSorted()); 
    System.out.println("Expected: false"); 

    **Output:** 
    false 
    Expected: true 
    false 
    Expected: false 
    false 
    Expected: false 

이 쉽게 테스트는 1/3 범위를 보여줍니다.

이 문제를 해결하는 방법.

+0

목록이 단순히 2 개의 요소 만 검사하여 정렬되는지 어떻게 확인할 수 있습니까? 그 두 요소가 정렬되었지만 다른 요소가 아닌 경우는 어떻게 될까요? – DevZer0

답변

8

방법에 약간의 버그가 있습니다. 해야합니다

if (list.get(i - 1).compareTo(list.get(i)) >0) 

당신은 >0 확인 대신 !=-1해야합니다

public boolean isSorted() 
{ 
    boolean sorted = true;   
    for (int i = 1; i < list.size(); i++) { 
     if (list.get(i-1).compareTo(list.get(i)) > 0) sorted = false; 
    } 

    return sorted; 
} 

>0 대신 !=1을, 당신은 ...

+1

당신은'sorted' 변수를 전혀 필요로하지 않습니다. 'if' 검사가 실패하면 즉시 false를 반환합니다. – mercury0114

+0

예, 정렬 된 변수가 전혀 필요하지 않습니다. for 루프 구문에 –

2

변경 조건 1가 반환됩니다 확신 할 수 없다 . 인수 문자열이 문자열 같으면 compareTo()

값 0의 문서를 통해

이동; 이 캐릭터 라인이 사전 적으로 캐릭터 라인 인수보다 작은 경우는 0보다 작은 값. 이 문자열이 사전 적으로 문자열 인수보다 큰 경우 0보다 큰 값입니다.

0

이전 요소가 현재 요소 뒤에 알파벳 따라서 목록이 정렬되지 않은 것을 나타냅니다 양수,에 compareTo와의 expresion을 변경해야

public boolean isSorted() 
    { 
     boolean sorted = true;   
     for (int i = 1; i < list.size(); i++) { 
      if (list.get(i-1).compareTo(list.get(i)) > 0) sorted = false; 
     } 

     return sorted; 
    } 
0

당신은 확인 필요 정렬되지 않은 케이스.

는 오름차순 정렬을 가정하는 경우, 정렬되지 않은 경우에 인덱스 i-1 element[i] < element[i-1]에서 순서가되는 인덱스 i에서 요소를 찾는 것을 의미한다.

1

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 

public class Sort { 
public static void main(String []args) { 
    List<String> l1=new ArrayList<String>(); 
    List<String> l2=new ArrayList<String>(); 
    l1.add("a"); 
    l1.add("b"); 
    l1.add("c"); 

    l2.add("b"); 
    l2.add("c"); 
    l2.add("a"); 

    if(isSorted(l1)){ 
     System.out.println("already sorted"); 
    } 
    else{ 
     Collections.sort(l1); 
    } 
    } 
public static boolean isSorted(List<String> list){ 
    String previous = ""; 
    for (String current: list) { 
     if (current.compareTo(previous) < 0) 
      return false; 
     previous = current; 
    } 
    return true; 
} 
} 
1

당신은 isSortedList(List list) 같은 utily 방법을 쓸 수보십시오.

public static boolean isSortedList(List<? extends Comparable> list) 
{ 
    if(list == null || list.isEmpty()) 
     return false; 

    if(list.size() == 1) 
     return true; 

    for(int i=1; i<list.size();i++) 
    { 
     if(list.get(i).compareTo(list.get(i-1)) < 0) 
      return false; 
    } 

    return true;  
} 

유틸리티 방법과 마찬가지로 어디에서나 사용할 수 있습니다.

+0

구문 오류가 있으므로 편집하십시오. – Naeem

관련 문제