簡體   English   中英

如何將最大數字與數組中的最后一個數字交換?

[英]How to swap the largest number with the last number in an array?

我正在嘗試創建一個程序,要求用戶輸入一個數字,即一個數組中將生成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”開始

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] + " ");

代替循環

//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循環打印即可。 告訴我是否可行。

我剛試過 希望這可以幫助。

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;
}
}

您的最后一個循環不做任何循環。 它只是一遍又一遍地做同樣的事情。 而且它做錯了。 它正在將最小的元素交換到第一個元素中,但沒有將第一個元素移到任何地方:已經消失了。

您需要跟蹤最大和最小元素的位置。 您的交換邏輯沒有考慮到這一點。

編寫這段代碼

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] + " ");
        }
    }
}

我建議不要使用掃描儀或隨機值進行測試,因為無法再現結果(至少不能以簡單的方式)。 注意什么是數組索引以及特定索引的值是什么。 這會很快導致混亂。 ^^

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

編碼愉快! ^^

通過找到最小和最大,您做得很好。 問題已交換。 我重構交換方法。 可能是可行的。

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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM