这是我当前的代码,这是我当前的输出:
This program will calculate an overall score for a diver, based on individual dives.
The diver's score for dive 1 is 79.80.
The diver's score for dive 2 is 49.80.
The average score for these dives is 64.80.
这是带有规格的页面。
基本上,这个程序从一个看起来像这样的文件中获取一个字符串:
1 2.5 8.5 8.0 8.5 9.5 9.0 7.5 6.5
其中1
是潜水次数,2.5
是难度,其余是分数。我将除最高和最低之外的所有分数相加,乘以难度,再乘以 0.6 得到我的潜水分数。
我遇到的问题是:我的潜水 2 分数是正确的,但我的潜水 1 分数不正确。我真的不太清楚为什么。
我真的很感激帮助;我绞尽脑汁想知道为什么会这样,但我似乎无法弄清楚。谢谢你的关注,我很感激。
编辑:这是你们的代码:
import java.util.*;
import java.io.*;
public class Dive {
public static void main(String[] args) throws FileNotFoundException {
printIntro();
Scanner fileScanner = new Scanner(new File("DiveData.txt"));
processDives(fileScanner);
}
public static void printIntro() {
System.out
.println("Welcome to the Diver Scoring program."
+ "\nThis program will calculate an overall score for a diver, based on individual dives.");
}
public static void processDives(Scanner fileScanner) {
double avg = 0;
int count = 0;
while (fileScanner.hasNext()) {
int diveNumber = fileScanner.nextInt();
String diveLine = fileScanner.nextLine();
double score = calculateDiveScore(diveLine);
avg += score;
System.out.printf("The diver's score for dive " + diveNumber
+ " is " + "%.2f. \n", score);
count++;
diveNumber = 0;
}
System.out.printf("\nThe average score for these dives is "
+ "%.2f. \n", avg / (double) count);
}
public static double calculateDiveScore(String diveLine) {
double score = 0.0;
String subNumbers = "";
double difficulty = Double.parseDouble(diveLine.substring(1, 4));
diveLine = diveLine.substring(5);
double max = -500, min = 500;
for (int i = 0; i < diveLine.length(); i++) {
// if we're getting something other than a space, add it to the
// string. We'll do the calculations while we have spaces.
if (diveLine.charAt(i) != ' ') {
subNumbers += diveLine.charAt(i);
} else {
double val = Double.parseDouble(subNumbers);
// if the score is neither largest nor smallest, add it to total
// score.
if (Math.max(val, max) == max && Math.min(val, min) == min) {
score += val;
}
// if it is either largest or smallest, add previous largest or
// smallest and set current to largest or smallest.
if (Math.max(val, max) == val) {
if (max != -500)
score += max;
max = val;
} else if (Math.min(val, min) == val) {
if (min != 500)
score += min;
min = val;
}
subNumbers = "";
}
}
//check the last number to see if it's a max or a min
if (Math.max(Double.parseDouble(subNumbers), max) == Double
.parseDouble(subNumbers)) {
score += max;
} else if (Math.min(Double.parseDouble(subNumbers), min) == Double
.parseDouble(subNumbers)) {
score += min;
}
return score * difficulty * 0.6;
}
}
答案可以在这里找到:
import java.util.*;
import java.io.*;
public class Dive {
public static void main(String[] args) throws FileNotFoundException {
printIntro();
Scanner fileScanner = new Scanner(new File("DiveData.txt"));
processDives(fileScanner);
}
public static void printIntro() {
System.out
.println("Welcome to the Diver Scoring program."
+ "\nThis program will calculate an overall score for a diver, based on individual dives.");
}
public static void processDives(Scanner fileScanner) {
double avg = 0;
int count = 0;
while (fileScanner.hasNext()) {
int diveNumber = fileScanner.nextInt();
String diveLine = fileScanner.nextLine();
double score = calculateDiveScore(diveLine);
avg += score;
System.out.printf("The diver's score for dive " + diveNumber
+ " is " + "%.2f. \n", score);
count++;
diveNumber = 0;
}
System.out.printf("\nThe average score for these dives is " + "%.2f.",
avg / (double) count);
}
public static double calculateDiveScore(String diveLine) {
diveLine = diveLine.substring(1);
String[] fields = diveLine.split(" ");
double difficulty = Double.parseDouble(fields[0]);
double[] scores = new double[fields.length - 1];
double max = -500.0, min = 500.0, score = 0;
for (int i = 0; i < fields.length - 1; i++) {
scores[i] = Double.parseDouble(fields[i + 1]);
}
for (int i = 0; i < scores.length; i++) {
if (Math.max(scores[i], max) == scores[i])
max = scores[i];
if (Math.min(scores[i], min) == scores[i])
min = scores[i];
score += scores[i];
}
score -= max;
score -= min;
return score * difficulty * 0.6;
}
}