2016-11-23 52 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; 
    } 
} 
相关问题