2016-11-23 5 views
0

私は、1-100の間の乱数の数を配列に生成する数を入力するようにユーザーに求めているプログラムを作成しようとしています。次に、最初の番号と交換される最後の番号と最小番号でスワップされる最大番号が必要です。これまでのところ私のコードです:配列内の最後の数字と最も大きい数字を入れ替えるにはどうすればいいですか?

import java.util.Scanner; 
import java.util.Random; 

public class smallbig 
{ 
    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     Random randomGenerator = new Random(); 

     int num = scan.nextInt(); 
     int[] myArray = new int[num]; 

     for (int i = 0; i < myArray.length; ++i) { 
      int randomInt = randomGenerator.nextInt(100); 
      myArray[i] = randomInt; 
     } 
     int smallest = myArray[0]; 
     int largest = myArray[0]; 

     for (int i = 1; i < myArray.length; i++) { 
      if (myArray[i] > largest) { 
       largest = myArray[i]; 
      } 
      if (myArray[i] < smallest) { 
       smallest = myArray[i]; 
      } 
     } 

     for (int j = 1; j < myArray.length; j++) { 
      int first = myArray[0]; 
      myArray[0] = smallest; 
      smallest = first; 

      int temp = largest; 
      int last = myArray.length; 
      myArray[last - 1] = largest; 
      temp = myArray[last - 1]; 

      System.out.print(myArray[j] + " "); 
     } 
    } 
} 

私は適切に交換するための数字を得ることができないようです。私は生成されたものから最小のものと最大のものを決定するループを作りました。これらのものは保存されています。それから私は必要なスワップを実行するループを作成しますが、正しく動作するようには見えません。それは最後の数字で最大の番号を交換するために正常に動作しますが、出力された最後の数字も大部分の時間(常にではありません)も配列のどこかに存在します。ここで私が何を意味するかです:

input: 10 
output: 62 48 34 0 91 14 64 60 91 

私が使用することができスワッパー方法がある知っているが、私は電話番号を手動で交換することによってそれをやりたいです。どんな助けでも感謝しています。

+0

スワップの半分しか実行していません。最小の値を配列の最初の位置に置きますが、最小の値を取った配列に最初の値を戻しません。スワップを完了できるように、最小値の配列インデックスを追跡する必要があります。 – stark

+0

ループを使用して値を交換しないでください。 –

答えて

0

あなたの最後のループはぎこちないことをしません。何度も同じことを繰り返します。そして、それは正しいものではありません。最小のものを最初の要素に入れ替えていますが、最初の要素をどこにでも移動させるわけではありません。

最大要素と最小要素がどこにあるかを把握する必要があります。あなたのスワップロジックはこれを考慮しません。代わりに、ループの

1

//find and stores poition of small 
int smallPos = myArray.indexOf(small); 

//stores tge values at 0 
int tempSmall = myArray[0]; 

//swaps the values 
myArray[0] = small; 
myArray[smallPos] = smallTemp; 

ちょうど最大値でこれを繰り返し、forループを使用してそれを印刷しません。それが動作するかどうか教えてください。

0

書き込みこのコード

import java.util.Scanner; 
import java.util.Random; 

public class smallbig 
{ 
    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     Random randomGenerator = new Random(); 

     int num = scan.nextInt(); 
     int[] myArray = new int[num]; 

     for (int i = 0; i < myArray.length; ++i) { 
      int randomInt = randomGenerator.nextInt(100); 
      myArray[i] = randomInt; 
     } 
     int smallest = myArray[0]; 
     int largest = myArray[0]; 
     int pos1,pos2; 

     for (int i = 1; i < myArray.length; i++) { 
      if (myArray[i] > largest) { 
       largest = myArray[i]; 
       pos1=i; 
      } 
      if (myArray[i] < smallest) { 
       smallest = myArray[i]; 
       pos2=i; 
       } 
     } 



myArray[pos1]=myArray[myArray.length-1]; 
myArray[myArray.length-1]=largest; 

myArray[pos2]=myArray[0]; 
myArray[0]=smallest; 

     for (int j = 1; j < myArray.length; j++) { 


      System.out.print(myArray[j] + " "); 
     } 
    } 
} 
0

使用すると、1つの単純なミスをしていますが、私はこれを試しスワップ

for (int j = 0; j < myArray.length; j++) { 
     int first = myArray[0]; 
     myArray[0] = smallest; 
     smallest = first; 

     int temp = largest; 
     int last = myArray.length; 
     myArray[last - 1] = largest; 
     temp = myArray[last - 1]; 

     System.out.print(myArray[j] + " "); 
+0

いいえ...ループを持っているのは間違いなので、ループ境界を修正することは完全な赤ちゃんです。 –

+0

彼は配列のすべての要素をループして、配列の最大と最小のインデックスを見つけるのは間違いだとは思わない。 –

+0

もちろん。ループで入れ替えるのは間違いです。スワッピングは一度だけ行う必要があります。 –

1

を実行すると、あなたのループが「0」から開始する必要があります。お役に立てれば。

public class App { 
static int[] a = new int[100]; 
public static void main(String[] args) { 
    int i; 
    for(i = 0; i<a.length;i++) 
     a[i] = (int)(java.lang.Math.random() * 100); 

    int smallest = 0, largest = 0; 

    for(i =1; i<a.length; i++){ 
     if(a[i] < a[smallest]) 
      smallest = i; 
     if(a[i] > a[largest]) 
      largest = i; 
    } 

    swap(0,smallest); 
    swap(a.length-1,largest); 

    for(i =0; i<a.length;i++) 
     System.out.print(a[i] + " "); 
} 

public static void swap(int i, int j){ 
    int temp = a[i]; 
    a[i] = a[j]; 
    a[j] = temp; 
} 
} 
0

結果を再現できないため(少なくとも簡単な方法ではないので)、スキャナまたはランダム値を使用しないことをお勧めします。配列のインデックスと特定のインデックスの値は何かに注意してください。これは非常に迅速に混乱につながる可能性があります。コーディングハッピー

のxD

0 1 8 7 6 5 4 3 2 9 
私は飢えているので、私は、私はこの1つ上の遅かった認める

と疲れ降伏^^

import java.util.Scanner; 
import java.util.Random; 



public class smallbig 
{ 

    private static int[] myArray; 

    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     Random randomGenerator = new Random(); 

     //int num = scan.nextInt(); //skip this for testing ^^-d 
     int num = 10; 
     myArray = new int[num]; 

     for (int i = myArray.length-1; i > 0; i--) { 
      //int randomInt = randomGenerator.nextInt(100); 
      int randomInt = i; //use test condition that can be reproduced! 
      myArray[i] = myArray.length-i; 
     } 
     int smallest = 0; 
     int largest = 0; 

     int smallestIndex = 0; 
     int largestIndex = 0; 

     for (int i = 0; i < myArray.length; i++) { 
      if (myArray[i] > largest) { 
       largest = myArray[i]; 
       largestIndex = i; 
      } 
      if (myArray[i] < smallest) { 
       smallest = myArray[i]; 
       smallestIndex = i; 
      } 
     } 

     switchIndexOfmyArray(0, smallestIndex); 

     switchIndexOfmyArray(myArray.length-1, largestIndex); 

     for (int j = 0; j < myArray.length; j++) { 
      System.out.print(myArray[j] + " "); 
     } 

    } 
    public static void switchIndexOfmyArray(int index, int switchWithIndex){ 
     int temp = myArray[index]; 
     myArray[index] = myArray[switchWithIndex]; 
     myArray[switchWithIndex] = temp; 
    } 
} 

! ^^

0

あなたは、最小のものと最大のものを見つけることによってうまくいった。問題はスワップしていた。私はスワップメソッドをリファクタリングします。それは動作するかもしれません。

import java.util.Scanner; 
import java.util.Random; 

public class smallbig 
{ 
    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     Random randomGenerator = new Random(); 

     int num = scan.nextInt(); 
     int[] myArray = new int[num]; 

     for (int i = 0; i < myArray.length; ++i) { 
      int randomInt = randomGenerator.nextInt(100); 
      myArray[i] = randomInt; 
     } 


     for(int k=0; k < myArray.length; k++) 
     { 
      System.out.print(myArray[k] + " "); 
     } 

     System.out.println(); 

     int smallest = myArray[0]; 
     int largest = myArray[0]; 

     int sIndx = 0; 
     int lIndx = 0; 

     for (int i = 1; i < myArray.length; i++) { 
      if (myArray[i] > largest) { 
       largest = myArray[i]; 
       lIndx = i; 
      } 
      if (myArray[i] < smallest) { 
       smallest = myArray[i]; 
       sIndx = i; 
      } 
     } 

     System.out.println(); 
     System.out.println("Smallest = "+smallest); 
     System.out.println("largest = "+largest); 
     System.out.println("Smallest Index = "+sIndx); 
     System.out.println("largest Index = "+lIndx); 

     swapSmallAndLargest(num, myArray, sIndx, lIndx); 

     for(int k=0; k < myArray.length; k++) 
     { 
      System.out.print(myArray[k] + " "); 
     } 


    } 

    private static void swapSmallAndLargest(int num, int[] myArray, int sIndx, int lIndx) { 
     int temp = 0; 

     temp = myArray[sIndx]; 
     myArray[sIndx] = myArray[0]; 
     myArray[0] = temp; 

     temp = myArray[lIndx]; 
     myArray[lIndx] = myArray[num-1]; 
     myArray[num-1] = temp; 
    } 
} 
関連する問題