質問
ようにしていくの小さなプログラムプリントアウトしたりすること個別の数字は、配列になります。たとえば、ユーザーが入り1,1,3,5,7,4,3のプログラムのみを印刷して1,3,5,7,4.
もしかしたらエラーのelse ifラインの機能 checkDuplicate
.
こちらは自分のコードでは:
import javax.swing.JOptionPane;
public static void main(String[] args) {
int[] array = new int[10];
for (int i=0; i<array.length;i++) {
array[i] = Integer.parseInt(JOptionPane.showInputDialog("Please enter"
+ "an integer:"));
}
checkDuplicate (array);
}
public static int checkDuplicate(int array []) {
for (int i = 0; i < array.length; i++) {
boolean found = false;
for (int j = 0; j < i; j++)
if (array[i] == array[j]) {
found = true;
break;
}
if (!found)
System.out.println(array[i]);
}
return 1;
}
}
解決
else if
」を記述する必要がある場合)あなたが任意の条件を提供しないので、すべてのまず、「if (condition) ...
は」文は、間違っています。
第二に、あなたはが内部のループ内で、値が印刷されなければならない場合を決定することはできません
の配列と異なっていること[I]!サード:内部ループは、外側のインデックスi-1
に0から行くためにだけ必要があります。それぞれの要素について、あなたは、決定するだけです、それは最初の発生がある場合(すなわち、同じ値が以前のインデックスで発生したか、していない場合) 。それがある場合は、それをプリントアウトし、そうでない場合は、それを無視します。
CheckDuplicate()
の適切な実装は以下のようになります:
public static void checkDuplicate(int array []) {
for (int i = 0; i < array.length; i++) {
boolean found = false;
for (int j = 0; j < i; j++)
if (array[i] == array[j]) {
found = true;
break;
}
if (!found)
System.out.println(array[i]);
}
}
しかし、もちろん、Set
のいくつかの種類がはるかに効率的に大きな配列のためだろう...
編集:もちろん、のmmyers の(コメントを参照)右CheckDuplicate()
は、任意の値を返さないので、それは(代わりにvoid
の)戻り値の型のint
を持っている必要があることを、言っています。私は上記のコードでこれを修正...
他のヒント
最も簡単な方法は、Set<Integer>
へのすべての要素を追加してからちょうどSet
の内容を印刷することです。
必要に応じて挿入時間によって順序付けられたセットでそれらを入れて、その配列に戻って変換します。
new LinkedHashSet<Integer>(array).toArray()
セットに整数のすべてを投げてみてください。重複が今までセットに追加されることはありません、あなたはユニークな整数の集合をしますままになります。
何をしたいでJavaを利用して収集APIなどの一ライナーにより、実際の収集方法の仕事 Object
sなプリミティブ.J2SEを欠く方法に変換するもの int[]
へ Integer[]
, が、Apache Commons Lang 図書館 などが含まれてい有用な方法のように、 ArrayUtils.toObject() や ArrayUtils.toPrimitive().
それらを用いた方法を除重複要素の整数型配列するとどうなるのかわかりません
public static int[] removeDuplicates(int... array) {
Integer[] ints = ArrayUtils.toObject(array);
Set<Integer> set = new LinkedHashSet<Integer>(Arrays.asList(ints));
return ArrayUtils.toPrimitive(set.toArray(new Integer[set.size()]));
}
アプリケーションの場合はその中にあまり配列/コレクションの操作をご提案いたしましくはそのライブラリではなく、実物をゼロから立ち上げました。でもやっているのでは学習を目的コードす。
おもしろくするのもいいけど追加しておくとよいでし各号に セット 実装ではなく、配列の型になります。セットは具体的には貯蔵要素がしたいフィルターウ重複している。
他の人が示唆しているように設定を使用するか、リストの互換性のクラスを使用しますか。リスト互換性のあるクラスではちょうどそれがすでに配列に存在するかどうかを確認する方法が含まれています。
インポートjava.util.Scanner; パブリッククラスPrintDistinctNumbers {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int [] numberArray = createArray();
System.out.println("The number u entered are: ");
displayArray(numberArray);
getDistinctNumbers(numberArray);
}
public static int[] createArray() {
Scanner input = new Scanner(System.in);
int [] numberCollection = new int [10];
System.out.println("Enter 10 numbers");
for(int i = 0; i < numberCollection.length; i++){
numberCollection[i] = input.nextInt();
}
return numberCollection;
}
public static void displayArray(int[] numberArray) {
for(int i = 0; i < numberArray.length; i++){
System.out.print(numberArray[i]+" ");
}
}
public static void getDistinctNumbers(int[] numberArray) {
boolean isDistinct = true;
int temp = 0;
int [] distinctArrayNumbers = new int [10];
for ( int i = 0; i < numberArray.length; i++){
isDistinct = true;
temp = numberArray[i];
for( int j = 0; j < distinctArrayNumbers.length; j++){
if( numberArray[i] == distinctArrayNumbers[j] ){
isDistinct = false;
}
}
if(isDistinct){
distinctArrayNumbers[temp]=numberArray[i];
temp++;
}
}
displayDistinctArray(distinctArrayNumbers);
}
public static void displayDistinctArray(int[] distinctArrayNumbers) {
for( int i = 0; i < distinctArrayNumbers.length; i++){
if(distinctArrayNumbers[i] != 0){
System.out.println(distinctArrayNumbers[i]);
}
}
}
}