2011-01-13 7 views
4

私は思っていた:ソートされた配列から0の値を削除しますか?私は、次のコードを実行したときに私が得るデフォルト値「0」を削除する方法があった場合

Scanner scan = new Scanner(System.in); 

int [] x = new int[4]; 
for (int i = 1; i < x.length; i++) 
{ 
    System.out.println("Enter number " + i + ": "); 
    x[i] = scan.nextInt(); 
} 
Arrays.sort(x); 
System.out.println(Arrays.toString(x)); 
} 

もちろん

[0, i[1], i[2], i[3]] 

を次のように出力され、すべてのここの配列の値は、実際にコンソールに入力された数値です。 コードはWORKINGです。すべての数字を正しい順序で並べ替えることはできますが、これは常に厄介なものです。

私はすべての0を削除するつもりはありません(ユーザーに0を入力して表示させたい) - 私はちょうどデフォルト0を望んでいない。任意のアイデア?

+0

再フォーマットされたコード;間違っている場合は元に戻してください。 – trashgod

答えて

2

ませんでしたサイズが4の場合、i [0]、i [1]、i [2]、およびi [3]の4つのintを割り当てています。 Javaはかなりフレンドリーであるため、これらの4つをすべて0に設定します。出力に表示されているのは[i[0],i[1],i[2],i[3]](ソート順)です。ソートは0を追加していない、すでにそこにあった。 3つの数字だけが必要な場合は、int [4]ではなくint [3]を割り当てる必要があります。そして、それに沿って進むには、番号1を求めるときにそれをi [0]に格納します。これを行うための最も簡単な変更は、しかし、より一般的なものであるだけで

x[i-1] = scan.nextInt(); 

他の回答で提案さの変化に

int [] x = new int[3]; 

以降の行に一番上の行を変更することです。ほとんどのプログラマは、0と2の間に入り、ユーザーと話すときにi + 1を出力します。

+0

詳細な説明ありがとうございます:] – Johannes

5

Javaの配列インデックスは、0から始まり1から始まるインデックスではありません。だから、0からではなく1から繰り返しを開始し、あなたは良いことがあります:(I = int型;私< x.length;私は++)のため

for (int i = 0; i < x.length; i++) 
+2

ああ。どのような愚かな間違い。私は叩かれるべきです。ありがとうございます! – Johannes

3

+0

Shengyuanありがとうございます! – Johannes

0

次のコードは動作するはずです:

を他の人が指摘したように、あなたがARRを割り当てると
Scanner scan = new Scanner(System.in); 

int[] x = new int[3]; 
for (int i = 0; i < x.length; i++) 
{ 
    System.out.println("Enter number " + i + ": "); 
    x[i] = scan.nextInt(); 
} 
Arrays.sort(x); 
System.out.println(Arrays.toString(x)); 

問題は1、あなたのint iは0から開始する必要があること、

+0

はい、ありがとうございます:] – Johannes