这是我当前的code,这是我目前的输出:
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.
这是包含specifications的页面。
基本上,这个程序从一个看起来像这样的文件中获取一个字符串:
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;
}
}
答案 0 :(得分:1)
使用String.split()
。您解析分数线的方式极其复杂且容易出错。
以下是一行 提示 : 这只是伪代码,以显示方法
final String s = "1 2.5 8.5 8.0 8.5 9.5 9.0 7.5 6.5";
final String[] fields = s.split(" ");
// get the metadata
final int diveNumber = Integer.parseInt(fields[0]);
final double difficulty = Double.parseDouble(fields[1]);
// convert the scores
final double[] scores = new double[fields.length - 2];
for (int i = 2; i < fields.length; i++ )
{
scores[i] = Double.parseDouble(fields[i]);
}
// the rest is left as an exercise to the reader
就个人而言,我会将所有原始数组转换为List
个实例,以便更轻松地使用它们,但这是另一个教训。
答案 1 :(得分:0)
由于这是家庭作业,你学习的最好方法可能是读取整个字符串,然后在字符串上创建一个扫描程序,然后用getDouble()迭代它。
所以:
for(iterate over number of lines) {
String yourString = "blah";
... create Scanner pointing to yourString...
while(scanner has a double) {
double nextNum = get next double from scanner;
... Do something with that double...
}
}
如果您需要任何有关细节的帮助,请随时提出。
编辑:woops,错过了指向您代码的链接。忽略'发布你的代码'位。