我想知道当我将值传递给方法调用时。有没有办法直接从方法调用中获取值?
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)
这是一个很好的机会来提取一种方法,一种面包和黄油重构技术。
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)
| 归档时间: |
|
| 查看次数: |
43 次 |
| 最近记录: |