コンパイラを使用してJavaで選択ソートプログラムを実装しようとしています。プログラムは、文字列のために正常に動作している間選択の実装方法整数のコンパレータを使用してソートする?
しかし、それは整数と混在ケース文字で失敗した(まだ浮動小数点値を試していない!)
ここに私のコードです:ことで
package edu.princeton.cs.algs4;
import java.util.Comparator;
public class Selection {
public static void sort(Comparable[] a) {
int n = a.length;
for (int i = 0; i < n; i++) {
int min = i;
for (int j = i+1; j < n; j++) {
if (less(a[j], a[min])) min = j;
}
exch(a, i, min);
assert isSorted(a, 0, i);
}
assert isSorted(a);
}
public static void sort(Object[] a, Comparator comparator) {
int n = a.length;
for (int i = 0; i < n; i++) {
int min = i;
for (int j = i+1; j < n; j++) {
if (less(comparator, a[j], a[min])) min = j;
}
exch(a, i, min);
assert isSorted(a, comparator, 0, i);
}
assert isSorted(a, comparator);
}
private static boolean less(Comparable v, Comparable w) {
return v.compareTo(w) < 0;
}
private static boolean less(Comparator comparator, Object v, Object w)
{
return comparator.compare(v, w) < 0;
}
private static void exch(Object[] a, int i, int j) {
Object swap = a[i];
a[i] = a[j];
a[j] = swap;
}
private static boolean isSorted(Comparable[] a) {
return isSorted(a, 0, a.length - 1);
}
private static boolean isSorted(Comparable[] a, int lo, int hi) {
for (int i = lo + 1; i <= hi; i++)
if (less(a[i], a[i-1])) return false;
return true;
}
private static boolean isSorted(Object[] a, Comparator comparator) {
return isSorted(a, comparator, 0, a.length - 1);
}
private static boolean isSorted(Object[] a, Comparator comparator, int
lo, int hi) {
for (int i = lo + 1; i <= hi; i++)
if (less(comparator, a[i], a[i-1])) return false;
return true;
}
private static void show(Comparable[] a) {
for (int i = 0; i < a.length; i++) {
StdOut.println(a[i]);
}
}
public static void main(String[] args) {
String[] a = StdIn.readAllStrings();
Selection.sort(a);
show(a);
}
}
ところで、 "StdIn"はPrinceton Universityから標準入力用に提供されたクラスであり、readAllStringsはファイル/標準入力から読み込まれたすべての文字列の配列を返します。
上記のコードは、文字列データに対して完全に機能しました。しかし、整数データの同じコードをテストしたかったとき、コンパイルは失敗しました。
これは私がmain()の部分のコードを改変する方法である:
public static void main() {
Integer[] a = StdIn.readAllInts();
Selection.sort(a);
Selection.show(a);
}
がreadAllInts())(readAllStringsと同様です。すべての整数を読み込み、整数の配列を返します。
しかし、コンパイル時に私は次のエラーを得た:次のように[]したがって
私は再びコードを置き換えINT []は整数に変換することはできません
:
public static void main(String[] args) {
int[] a = StdIn.readAllInts();
Selection.sort(a);
Selection.show(a);
}
しかし、もう一度私はエラーがある:
選択。 java:80:error:クラスSelectionのメソッドは指定された型に適用できません。 理由:引数の不一致。
Selection.java:79:intがに匹敵[]
と、このエラーに変換することはできませんエラー:ソートに見つかりません適切な方法([] int型)
でした誰もしてくださいどうすればこの問題を回避できますか? 私は動作する1つのメソッドを見つけましたが、まず整数配列を初期化して値を提供する必要があります。
これは、私がStringの場合とは違って、ファイルから読み取ることができないことを意味します。ここで
はさらに参照するためのそれぞれのAPIへのリンクです:事前に
感謝!!
私は、プリンストン大学が提供するAPIを標準APIではなく、上記のすべてのエラーにつなげることを強く示唆していません。コードを理解し、標準のJavaライブラリを使用して実装します。自信を持っていれば、* API *を使い始めることができます。しかし、プログラミング課題では、プリンストン大学のAPIだけを使用する必要があります。 – doctorwho