簡體   English   中英

調用方法並返回數組

[英]Calling a method and returning to an array

我正在開發一個程序,它涉及數組。 我是新手,所以我一直在編寫代碼並一遍又一遍地刪除它。

我需要讓用戶輸入一個從 1 到 99 的數字。

他們的輸入應該分配單個暗數組的大小。

然后我必須將該數組發送到一個從 55 到 100 中隨機選擇 DOUBLES 並將它們放入數組的方法。

這就是我現在正在玩的東西。 我開始迷惑自己了!

public static void main(String[] args) {

    int scores = 0;
    int numberOfGrades;

    Scanner input = new Scanner(System.in);


    System.out.println("Please enter a number of grades from 1 to 99: ");
    numberOfGrades = input.nextInt();

    int[] amountOfGrades = new int[numberOfGrades];

    randomGrades(amountOfGrades);

    System.out.print("The letter grades for each score are: ");

} //End Method


   /**
    * 
    * @param array
    * @return
    */
    public static int randomGrades(int[] array) {
        for (int cntr = 55; cntr < 100; cntr++) {
            int rndm = new Random().nextInt(array.length);
            return array[rndm];

        }//End Main Method

試試下面的代碼:

package eu.webfarmr;

import java.util.Random;

public class DoubleArray {
    public static void main(String[] args) {
        int numberOfGrades = 10;
        int[] grades = generateRandomGrades(numberOfGrades);
        for (int grade : grades){
            System.out.println(grade);
        }
    }

    private static int[] generateRandomGrades(int numberOfGrades) {
        int[] grades = new int[numberOfGrades];
        for (int i = 0; i < numberOfGrades; i++){
            grades[i] = new Random().nextInt(45)+55;
        }
        return grades;
    }
}

它生成一個大小為 10 的數組,並在數組的每個元素內存儲一個介於 55 和 100 之間的新隨機值。

解決方案:

public static double[] randomGrades(double[] array) {
    Random rndm = new Random(); // creating Random outside of the for loop, not in each iteration in for-loop to save memory
    for (int i = 0; i < array.length; i++) { // for each element of an array
        array[i] = (double) (rndm.nextInt(45) + rndm.nextDouble() + 55);
    }
    return array; // return array of doubles
}

還要更改main()方法中的以下行,從:

int[] amountOfGrades = new int[numberOfGrades];

到:

double[] amountOfGrades = new double[numberOfGrades];

正如你所說的,你想存儲double值而不是int s。

for循環的解釋:

array[i] = (double) (rndm.nextInt(45) + rndm.nextDouble() + 55);

rndm.nextInt(45)返回從 0(包含)到 45(不包含)的int

rndm.nextDouble()從 0.0(包含)到 1.0(不包含rndm.nextDouble()返回double rndm.nextDouble()

最小可能值:0 + 0.0 + 55 = 55

最大可能的值:44 + 1.0 + 55 = 100(注意,隨機double不完全是1.0,因為它是獨特的,但它是任何其他可能的double值接近1.0,由於巨大的double精度


編輯:

randomGrades(amountOfGrades); ,您創建隨機雙精度值並將它們存儲在一個數組中,但您既不將這些值打印到控制台也不將這些值分配給數組:您可能需要考慮更改此行:

randomGrades(amountOfGrades);

到:

amountOfGrades = randomGrades(amountOfGrades); // that way you have access to result doubke values later
System.out.println(Arrays.toString(amountOfGrades));

整個工作程序:

好的,為了您的方便,我包含了整個解決方案,但盡量不要盲目復制它,嘗試了解這里發生的事情(如果您需要將int值傳遞給randomGrades()而不是double[]作為參數,請取消注釋我包含的所有注釋並刪除不需要的部分):

import java.util.*;

public class Test {

    public static void main(String[] args) {
        int scores = 0;
        int numberOfGrades;

        Scanner input = new Scanner(System.in);

        System.out.println("Enter amount:");
        numberOfGrades = input.nextInt();

        double[] amountOfGrades = new double[numberOfGrades];
        amountOfGrades = randomGrades(amountOfGrades /* or: amountOfGrades.length */);
        System.out.println(Arrays.toString(amountOfGrades));

        System.out.println("Letter grades...");

    }

    public static double[] randomGrades(double[] array /* or: int amount */) {
        Random rndm = new Random();
        // add this line if you use int argument: double[] array = new double[amount];
        for(int i = 0; i < array.length; i++) {
            array[i] = (double)(rndm.nextInt(45) + rndm.nextDouble() + 55);
        }
        return array;
    }
}

暫無
暫無

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

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