我正在為自己開發一個程式來計算用戶的高爾夫差點,我目前正忙于獲取平均分數。它所做的只是列印出一個空陣列。這些問題發生在我的 HandicapIndexCalculator 類中。任何幫助是極大的贊賞。我沒有長時間編碼,所以問題對某些人來說可能很明顯。以下是按順序排列的代碼。最后是 MCVE。空陣列應包含所有分數的平均值。
我的主要課程:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
UserProfile user = new UserProfile();
Attributes stats = new Attributes();
HandicapIndexCalculator handicap = new HandicapIndexCalculator();
System.out.print("\nWelcome to GolfMax! Your personal Handicap Calculator. \nTo begin, please enter your first and last name: ");
String userName = input.nextLine();
user.setName(userName);
user.readAndValidateName();
stats.getCourseAttributes(input);
handicap.getAverageScoreDifferential();
}
}
我的屬性類:
import java.util.Scanner;
public class Attributes {
Scanner input = new Scanner(System.in);
private final int MIN_COUNT = 5; private final int MAX_COUNT = 20;
private boolean validCount = false; public int count;
public double[] userCourseRating;
public double[] userSlopeRating;
public double[] userScores;
final int AVERAGE_DIFFICULTY = 113;
public void getCourseAttributes(Scanner input) {
System.out.print("\nPlease enter a minimum of 5 scores & maximum of 20 scores: ");
int userCount = input.nextInt();
while(!validCount) {
userScores = new double[userCount];
userCourseRating = new double[userCount];
userSlopeRating = new double[userCount];
if(userCount >= MIN_COUNT && userCount <= MAX_COUNT) {
validCount = true;
for(int i = 0; i < userCount; i ) {
System.out.printf("\nEnter Score #%d: ", i 1);
if(input.hasNextInt()) {
userScores[i] = input.nextInt();
}
System.out.printf("Enter Course Rating #%d: ", i 1);
if(input.hasNextDouble()) {
userCourseRating[i] = input.nextDouble();
}
System.out.printf("Enter Slope Rating #%d: ", i 1);
if(input.hasNextDouble()) {
userSlopeRating[i] = input.nextDouble();
}
}
}
else {
System.out.print("\nInvalid Input. \nPlease try again. \nPlease enter a minimum of 5 scores & maximum of 20 scores: ");
userCount = input.nextInt();
setScoreCount(userCount);
getScoreCount();
}
}
}
public void setScoreCount(int userCount) {
this.count = userCount;
}
public int getScoreCount() {
return count;
}
}
最后,這就是問題所在......我認為:
import java.util.Arrays;
public class HandicapIndexCalculator {
private final int AVERAGE_DIFFICULTY = 113;
private double[] handicapIndex;
double[] averageScoreDifferential;
Attributes atr = new Attributes();
public void getAverageScoreDifferential() {
averageScoreDifferential = new double[atr.count];
for(int i = 0; i < averageScoreDifferential.length; i ) {
averageScoreDifferential[i] = (atr.userScores[i] - atr.userCourseRating[i]) * (AVERAGE_DIFFICULTY / atr.userSlopeRating[i]);
averageScoreDifferential[i] = Math.round(averageScoreDifferential[i] * 1000.0) / 1000.0;
}
Arrays.sort(averageScoreDifferential);
System.out.print(Arrays.toString(averageScoreDifferential));
}
}
MCVE:
Welcome to GolfMax! Your personal Handicap Calculator.
To begin, please enter your first and last name: Bob
User: Bob ID #66e038cf-1014-4d18-9e60-672f19f2ff6b
Please enter a minimum of 5 scores & maximum of 20 scores: 5
Enter Score #1: 78
Enter Course Rating #1: 61
Enter Slope Rating #1: 103
Enter Score #2: 80
Enter Course Rating #2: 61
Enter Slope Rating #2: 103
Enter Score #3: 82
Enter Course Rating #3: 61
Enter Slope Rating #3: 103
Enter Score #4: 85
Enter Course Rating #4: 61
Enter Slope Rating #4: 103
Enter Score #5: 90
Enter Course Rating #5: 61
Enter Slope Rating #5: 103
[]
uj5u.com熱心網友回復:
因為您在 Main 類和 HandicapIndexCalculator 中的屬性是不同的物件,所以您需要在 HandicapIndexCalculator 的建構式中分配或使用 setter,如下所示:
class HandicapIndexCalculator { private final int AVERAGE_DIFFICULTY = 113; private double[] handicapIndex; double[] averageScoreDifferential; Attributes atr = null; public void setAttributes(Attributes atr) { this.atr = atr; } public void getAverageScoreDifferential() { ... } }
主類:
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
UserProfile user = new UserProfile();
Attributes stats = new Attributes();
HandicapIndexCalculator handicap = new HandicapIndexCalculator();
handicap.setAttributes(stats);
...
}
}
需要第一次更新計數
class Attributes { ... public void getCourseAttributes(Scanner input) { System.out.print("\nPlease enter a minimum of 5 scores & maximum of 20 scores: "); int userCount = input.nextInt(); setScoreCount(userCount); ... } ... }
uj5u.com熱心網友回復:
(HandicapIndexCalculator 的第 6 行):
Attributes atr = new Attributes();
這使得,好吧,文本把它拼出來,真的,一個新的類。這與您在main. 這個新屬性以建構式的方式開始 - 計數為 0,陣列未初始化。您必須在其上呼叫方法“getCourseAttributes(Scanner)”才能包含任何內容。
解決方案似乎微不足道。不要做一個新的。相反,將您在 main 中創建的 Attributes 物件傳遞給該calculateHandicap方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/449894.html
