有没有办法获取传递给方法调用的值?

CTM*_*CTM 0 java methods

我想知道当我将值传递给方法调用时。有没有办法直接从方法调用中获取值?

int playerPosition = calculateHighScorePosition(1500); //<-- Is there a way to grab this passed value?
        displayHighScorePosition("Perseus", playerPosition, 1500);//<-- Instead of hardcoding it in?
Run Code Online (Sandbox Code Playgroud)

这是我想知道的完整代码:

package com.company;

import org.w3c.dom.ls.LSOutput;

public class Main {

    public static void main(String[] args) {

        /*boolean gameOver = true;
        int score = 800;
        int levelCompleted = 5;
        int bonus = 100;
        int highScore = calcScore(gameOver, score, levelCompleted, bonus);
        System.out.println("Your final score was " + highScore);
        score = 10000;
        levelCompleted = 8;
        bonus = 200;
        highScore = calcScore(gameOver, score, levelCompleted, bonus);
        System.out.println("Your final score was " + highScore);*/

        int playerPosition = calculateHighScorePosition(1500); //<-- Is there a way to grab this passed value?
        displayHighScorePosition("Perseus", playerPosition, 1500);//<-- Instead of hardcoding it in?

        playerPosition = calculateHighScorePosition(900);
        displayHighScorePosition("Achilles", playerPosition, 900);

        playerPosition = calculateHighScorePosition(400);
        displayHighScorePosition("Hercules", playerPosition, 400);

        playerPosition = calculateHighScorePosition(50);
        displayHighScorePosition("Leonidas", playerPosition, 50);
    }

    /*public static int calcScore(boolean gameOver, int score, int levelCompleted, int bonus){
        if(gameOver){
            int finalScore = score + (levelCompleted * bonus);
            finalScore += 2000;
            return finalScore;
        } else {return -1;}
    }*/

    public static int calculateHighScorePosition(int highScore){

        if (highScore >= 1000){
            return 1;
        } else if (highScore >= 500){
            return 2;
        } else if (highScore >= 100){
            return 3;
        } return 4;
    }

    public static void displayHighScorePosition(String playerName,int playerPosition, int highScore){
        System.out.println(playerName + " managed to get into position "
                + playerPosition + " by scoring " + highScore + " points.");
    }
}
Run Code Online (Sandbox Code Playgroud)

来源

Joh*_*ica 5

这是一个很好的机会来提取一种方法,一种面包和黄油重构技术。

private static void calculateAndDisplayHighScorePosition(String name, int highScore) {
    int playerPosition = calculateHighScorePosition(highScore);
    displayHighScorePosition(name, playerPosition, highScore);
}
Run Code Online (Sandbox Code Playgroud)

(你或许可以想出一个更好、更短的名字。)

这摆脱了重复的逻辑main()

calculateAndDisplayHighScorePosition("Perseus", 1500);
calculateAndDisplayHighScorePosition("Achilles", 900);
calculateAndDisplayHighScorePosition("Hercules", 400);
calculateAndDisplayHighScorePosition("Leonidas", 50);
Run Code Online (Sandbox Code Playgroud)

您可以通过将阈值分数保存在并行数组中来进一步减少重复:

String[] names = {"Perseus", "Achilles", "Hercules", "Leonidas"};
int[] scores = {1500, 900, 400, 50};

for (int i = 0; i < names.length && i < scores.length; i++) {
    calculateAndDisplayHighScorePosition(names[i], scores[i]);
}
Run Code Online (Sandbox Code Playgroud)