2016-09-07 4 views
0

코드는 기본적으로 정렬 할 요소 수와 요소를 묻고 정렬하여 인쇄합니다. 적어도 그렇게해야합니다.Java에서 정렬 된 배열 인쇄

enter image description here

어떻게해야합니까 : 나는 그것을 실행하면 그것은 그렇게 할 것인가? 나는 JDK 7IntelliJ IDEA 15을 사용하고 있습니다.

그리고 예, 나는 Google을했는데 아무 것도 찾을 수 없었습니다. 아뇨, 코드를 원하지 않습니다. 의견이 필요합니다.

import java.text.MessageFormat; 
import java.util.Scanner; 

public class bb { 
    public static void main(String[] args){ 
     Scanner scan = new Scanner(System.in); 
     System.out.print("Enter number of elements:"); 
     int numberOfElements = scan.nextInt(); 
     System.out.print(MessageFormat.format("Enter {0} {1} ",numberOfElements,"numbers: ")); 
     int [] elements = new int[numberOfElements]; 
     for (int i = 0; i < elements.length; i++) { 
      elements[i]=scan.nextInt(); 
      java.util.Arrays.sort(elements); 
     } 
     System.out.println(java.util.Arrays.toString(elements)); 
    } 
} 
+0

루프 내부에서 배열을 정렬합니다.이것은'elements'가 이미 모든 배열 값의 기본값으로 0을 설정했기 때문에 문제가됩니다 (현재 설정 중이거나 설정 한 것을 제외하고). 즉, 이전에 읽은 값을 덮어 쓰는 것이 가능합니다 (이는 사용자에게 발생합니다). – Slimu

답변

2

이렇게 다른 값으로 elements의 기본 값 (0)을 고려할 것 루프에서 정렬. 따라서 정렬 후에 배열의 최소값은 0이 아니어야합니다.

해결 방법, 루프 외부에서 sorting을 수행하십시오.

for (int i = 0; i < elements.length; i++) { 
    elements[i]=scan.nextInt(); 
} 
java.util.Arrays.sort(elements); 
+0

간단합니다. 고맙습니다! – HTT

2

대신 사용한다, 목록 매번 루프가 필요하다 발생 분류하고 있습니다 :

for (int i = 0; i < elements.length; i++) { 
    elements[i]=scan.nextInt(); 
} 
java.util.Arrays.sort(elements); 

루프에 java.util.Arrays.sort(elements); 매번 실행하면 기본적으로 당신이 원하는 말을하는지 숫자가 입력 된 elements 매번 정렬이 발생하는 경우 : 0 이유가 어디 갔지 것을

Enter number of elements:2 
Enter 2 numbers: 3 
sort being called on[0, 3] 
1 
sort being called on[0, 1] 
[0, 1] 

입니다

> Arrays.sort([2,0,0]) 당신이 [0,0,2]을 얻을 것이다 따라서이 문제가 발생할 것이다 - 당신이 시도하고 하나 개의 요소 2를 추가 한 후이를 정렬 할 때 그래서

int[] x = new int[3]; // this is making [0,0,0] 

: n을 요소의 n 수와 함께 int 배열을 초기화이 있습니다.

+0

감사합니다! 감사합니다. – HTT

2
Issue i see is You are sorting array even when your still getting input from user. 
e.g. 
You initialized array to size 3 [0,0,0] 
in first loop user provides 4 [4,0,0] after sort [0,0,4] 
in Second loop user provides 7 [0,7,4] after sort [0,4,7] 
in third loop user provides 1 [0,4,1] after sort [0,1,4] 
here your value is getting overwritten. 

write sort function after you finish getting input from user. 
+0

고마워요! .... – HTT

0

코드가 작동하지 않는 이유를 알아야 할 두 가지 사항이 있습니다.

  1. 배열은 생성시 기본값으로 초기화됩니다.
  2. sort 호출은 모든 단계에서 정렬을 수행하는 for 루프 내에 배치됩니다.

설명 :

는 "요소의 수"를 제공 할 때마다 = 2, 요소가 문을 정렬 할 위치 요소 [0]과 통화 읽기, 그것은 1 위치 요소에 배치됩니다 ]. 그런 다음 다음 반복에서 요소를 읽고 position 요소 [1]에 배치하여 해당 위치의 값을 덮어 씁니다. 따라서 요소 수 = 2 인 0과 2 번째 입력 번호로 항상 상륙합니다.

하나 이상의 요소를 덮어 쓸 수있는 두 개 이상의 요소에서 비슷한 경우가 발생합니다.

+0

매우 유익합니다. 고맙습니다! – HTT