2012-03-24 5 views
1

パラメータの配列を整数として受け取り、文字列を返すプログラムを作成しようとしています。文字列は、配列が最小から最大にソートされている場合は「昇順」、配列が最大から最小にソートされている場合は「降順」、配列がソートされていない場合は「ソートされていない」、配列のすべての要素が等しい場合は同じです。配列がソートされているかどうかを確認する

これまでのところ、以下のコードがあります。正しい軌道にいるのですか?私は、以下の行に "演算子>が引数型の定義されていない"というエラーが出ています。どのような考えがそれを引き起こす可能性がありますか?

import java.util.*; 
import java.io.*; 
import java.util.Scanner; 

public class arrayCheck { 
    public static void main(String[] args) throws IOException { 
     arrayInput(); 
     isSorted(null); 
    } 

    public static String arrayInput() { 
     int size = 0; 
     Scanner in = new Scanner(System.in); 
     System.out.println("Enter the size of the array: "); 
     size = in.nextInt(); 
     System.out.println("The size you enetered is " + size); 
     int[] array = new int[size]; 
     System.out.println("Enter the array: "); 
     int j = 0; 
     while (j < size) { 
      System.out.print("Enter int"+ (j + 1) + ": "); 
      array[j] = in.nextInt(); 
      ++j; 
     } 
     in.close(); 
     String arrayS = Arrays.toString(array); 
     return arrayS; 
    } 

    public static String isSorted(String[] arrayS) { 
     int n = arrayS.length; 
     for (int i = 0; i < n - 1; ++i) 
      if (arrayS[i] > arrayS[i + 1]) //ERROR ON THIS LINE 
       return "not ascending"; 
     return "ascending"; 
    } 
} 
+8

"私はまだJavaの初心者ですので、私と一緒に裸です!" - 私はJavaを知っているかどうかに関係なく、誰とも裸ではない。私はあなたの質問に喜んで喜んでいるかもしれません。 – duffymo

+0

私のタイプミスで私の悪い! – choloboy

答えて

8

エラーがオペレータ>があなたの配列の要素型であるStringタイプのために定義されていないことを意味します。 <>の演算子は、オブジェクトではなくintまたはlongのようなプリミティブ型でのみ使用できます。

ここでは、このように、代わりにString.compareToを使用する必要があります。

if (arrayS[i].compareTo(arrayS[i+1]) > 0) 
+0

私は分かりませんでした!しかし、私は今理解しています。有益な答えPeterに感謝します。とても有難い! – choloboy

2

Stringはインタフェースのためのフォームが実際にComparator<E>ですので、あなたがしている(あなたは二つのオブジェクトの値を比較することを可能にする、Comparatorを実装Comparator<String>を使用)。

ので、代わりに:

for (int i=0;i<n-1;++i) { 
    if (arrayS[i]>arrayS[i+1]) { 
     // Stuff 

...あなたが使用する必要があります。

for (int i=0;i<n-1;++i) { 
    if (arrayS[i].compareTo(arrayS[i+1]) > 0) { 
     // Stuff 
2

を[ユーザーは、整数の配列を入力し、その配列の型はintとして保たれるべきです]。例:

public static int[] arrayInput() { 
    // ... 
    return array; 
} 

public static String isSorted(int[] arrayS) { 
    // ... 
} 
+0

したがって、2番目の方法は、私は文字列配列にint配列を変換する必要がありますか? – choloboy

+0

@theolc、いいえ、入力はテキストとして到着しています。もしそれを 'int []'配列に格納したいのであれば、 'String'を' int'に変換する必要があります。 ['Integer.parseInt'](http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#parseInt%28java.lang.String%29)。次に、 'String []'の代わりに 'int []'を処理して、配列の 'int'を実際に'> 'と比較することができます。 –

+0

もう一度あなたの助けに感謝Peter – choloboy

0

私はあなたが必要とするよりも複雑なものにしていると思います。

  1. arrayInputでは、int []を作成して文字列に変換します。どうして?
  2. isSortedでは、String []を取得し、ソートされているかどうかをチェックします。
    1. #1がStringを生成する必要があると主張するなら、#2はString []を入力として受け取ります。
    2. は、私はあなたの関数issortedコードはかなりよくあるように働くだろうと思いますが、入力があった場合にINT []関数issortedでarrayInputを接続するものは何もありません
0

代替戦略。昇順と降順の配列を計算し、一致するかどうかを確認します。これはあまり効率的ではないかもしれませんが、実装が簡単でデバッグが簡単です。私は逆の並べ替えを行うためにプリミティブ配列を囲むだけでした。

private static void isSorted(int[] array) { 
    List<Integer> boxed = new ArrayList<Integer>(); 
    for (int i : array) { 
     boxed.add(i); 
    } 
    List<Integer> ascending = new ArrayList<Integer>(boxed); 
    Collections.sort(ascending); 

    List<Integer> descending = new ArrayList<Integer>(ascending); 
    Collections.reverse(descending); 

    if (boxed.equals(ascending)) { 
     System.out.println("Ascending"); 
    } else if (boxed.equals(descending)) { 
     System.out.println("Descending"); 
    } else { 
     System.out.println("Unsorted"); 
    } 
} 
+0

あなたは '' Collections.reverse() 'を使うだけで、ソートを2回行う必要はありません。おそらく 'Arrays.asList()'を使って最初にリストを作成することもできます。 – DNA

+0

@DNA良い点。回答を更新します。 – Adam

+0

はプリミティブ型で動作します... – Vlad

関連する問題