2017-12-06 11 views
-1

最近、配列のintをとり、それらを最大から最小の別の配列に配置するプログラムを作成しましたが、ネガティブを挿入すると機能しません。負の整数ではなく0を出力します。配列内の整数を最大から最小にソートする。負のintは動作しません

import java.util.Arrays; 

public class g2lArrays2 { 

    public static void main(String[] args) { 
     int[] nums = {15,31,7,2,7}; 
     int[] place = new int [nums.length]; 
     int[] definer = new int [nums.length]; 
     int a = 0,b = 0,c; 
     place[0] = a; 
     place[1] = 1; 
     for (int i1 = 0; i1<place.length; i1++) { 
     for (int i = 0; i<nums.length; i++) { 
      if (nums[i] > a) { 
       place[i1]=nums[i]; 
       a=place[i1]; 
       definer[i]=1; 
      } 
     } 
     a = 0; 
     for (c = definer.length-1; b==0 && c>-1; c--) { 
      if (definer[c]==1) { 
       b=c; 
      } 
     } 
     nums[b]=0; 
     b=0; 
     for (int i2 = 0; i2<definer.length; i2++) { 
      definer[i2]=0; 
     } 
     } 
     System.out.println(Arrays.toString(place)); 
    } 
} 

これは別の方法で動作しますが、私が述べたように、負の整数ではありません。だから私は何が間違っているのか、このプログラムをより効率的にソートする方法があるのか​​不思議です。すべてのフィードバックは高く評価されます。

+0

コレクションのソートにはさまざまな方法がありますが、いくつかの洞察のためには[ソートアルゴリズム](https://en.wikipedia.org/wiki/Sorting_algorithm)を調べることをおすすめします。 – Immac

+0

@Mureinikそれはおそらく宿題です。 – Immac

+2

これをデバッガで実行することを強くお勧めします。 –

答えて

0

私はFairPlayの答えは、完全に配列をソートするための最良の方法だと思います。それはあなたのコードに問題があった理由を尋ねたと言いました、そして、それは私がここで説明しようとしているものです。

まず、placeという名前の配列を印刷しているので、その特定の配列にコードが含まれている場所についてのみコメントします。

これは場所の配列に影響を与え、あなたのコード内の部品である:

public static void main(String[] args) { 
    int[] nums = {15,31,7,2,7}; 
    int[] place = new int [nums.length]; 
    int[] definer = new int [nums.length]; 
    int a = 0,b = 0,c; 
    place[0] = a; 
    place[1] = 1; 
    for (int i1 = 0; i1<place.length; i1++) { 
    for (int i = 0; i<nums.length; i++) { 
     if (nums[i] > a) { 
      place[i1]=nums[i]; 
      a=place[i1]; 
      definer[i]=1; 

オーケー最初はこれをクリアすることができます。注意を払うべき最初のことは正しいアイデンティティであり、それが良いと思うときはいつでも改行を作成することです。第2に、ループや内部でのみ使用される変数をi、j、kという名前で作成し、可能であれば繰り返す(これはルールよりもヒントです)。ここで

はクリーンコードです:

public static void main(String[] args) { 

    int[] nums = {15,31,7,2,7}; 
    int[] place = new int [nums.length]; 
    int[] definer = new int [nums.length]; 

    int a = 0, 
    int b = 0; 

    place[0] = a; 
    place[1] = 1; 

    for (int i = 0; i < place.length; i++) { 

     for (int j = 0; j < nums.length; j++) { 

      if (nums[j] > a) { 

       //first a = 0 just so i remember 
       //int[] nums = {15,31,7,2,7}; 

       place[i] = nums[j]; 
       a = place[i]; 
       definer[j] = 1; 

はそれを手に入れました!問題は上記の場合とまったく同じです。問題はnums [j]> aにあります。明らかに、負の数値はチェックを渡すことはありませんし、それが問題です。

EDIT:わかりました。私はちょうど終わりのための最初の(悪い識別)が問題は同じですが、私は誤解を感じました。 aとbはループごとに0に設定されているため、負の数に問題があります。負数の場所に表示される0は、nums配列にb = 0を追加したためです。

解決するには、彼の答えでFairPlayが述べたように、ただarray.sort()を使うべきです。これを修正しようとするのは価値がありません。

関連する問題