2016-09-07 7 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理由はそのWHEこと

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

コードが機能しない理由を理解するためには、2つの注意点があります。

  1. アレイは、作成時にデフォルト値で初期化されます。
  2. ソートの呼び出しは、すべてのステップでソートを行うforループの内側に配置されます。

説明:あなたは、「要素数」= 2を提供するたびに

、要素が位置要素に読み込まれ、[0]、文を分類するの呼び出しで、それが位置要素に置かれます[1 ]。次に、次の反復で、要素が読み込まれ、要素[1]に配置され、その位置の値を上書きします。したがって、要素数= 2のゼロと2番目の入力番号を常に使用します。

2つ以上の要素で同様のケースが発生し、1つ以上の要素が上書きされることがあります。

+0

非常に有益です。ありがとうございました! – HTT

関連する問題