2016-11-23 50 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

你有一個簡單的錯誤,你的循環應該從「0」開始,當你進行交換

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

我只是嘗試這樣做。希望這可以幫助。

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

我建議不要使用掃描儀或隨機值用於測試由於結果不能再現(至少不是以簡單的方式)。請注意什麼是數組索引,以及特定索引處的值是多少。這可能會很快導致混淆。 ^^

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 1 8 7 6 5 4 3 2 9 

我承認我是在這一個緩慢的,因爲我又餓又累的xD

編碼愉快! ^^

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; 
    } 
} 
相關問題