0

好的,所以我得到了这个任务,要求我有一个输入数量可变的方法以及一个字符串输入。输入都必须在扫描仪中的一行,并且该方法必须返回输入值的数量、平均值、最大值、最小值和输入的字符串。

这是终端窗口应该看起来的示例。

Please enter the name of the course: CourseNameHere
Please enter the scores for CSC 201 on a single line and type a -1 at the end
71 02 81 44 84 17 38 11 20 05 93 -1

The course name     : CourseNameHere
Number of Scores    : 11
The Average Score   : 42.37
The Minimum Score   : 02
The Maximum Score   : 93

平均分数必须四舍五入到小数点后 2 位(我想我可以处理) 对我来说唯一的问题是在一行上扫描可变数量的输入,以及如何让程序计算输入的数量如果我没有在输入之间按回车键。这就是我到目前为止所拥有的。但我不知道从这里去哪里。我可以让它要求顺序值,但它们并不都在同一行

public static int calculate(int again)
{
Scanner input = new Scanner(System.in);
int numberOfValues = 0;
int max = -9999;
int min =  100000;
int sum = 0;
double value;

System.out.print("What is the name of the course you wish to evaluate? : ");
String courseName = input.next();
System.out.println("Please enter the scores for the class, press enter between each value." + "\n" + "Enter -1 to finish and calculate.");
for(value = 0; value != 1; numberOfValues++)
        {
            value = input.nextDouble();
            sum += value;





        }
4

3 回答 3

1

答案取决于方法的输入。您是否收到一个和一个's 或一个,String的数组。也就是说,用户的输入是否已经为您分解了?intStringString

例如...

Scanner kb = new Scanner(System.in);
String courseName = kb.nextLine();
String scoreLine = kb.nextLine();

// courseName and scoreLine now become the parameters to you method...

// You could then use another scanner to break the line down...
Scanner scoreLineScanner = new Scanner(scoreLine);

while (scoreLineScanner.hasNextInt()) {
    int score = scoreLineScanner.nextInt();
    if (score != -1) {
        // Calculate other values...
    } else {
        break;
    }
}

我确实考虑过使用String#split(" "),但是你可能需要将每个元素转换为int你自己,这可能合适也可能不合适(有点混乱)

于 2013-10-04T01:31:45.517 回答
0

将“可变数量的输入”输入到 aString后,使用 上的.split()命令将String其拆分为String多个部分,并将其分配给一个数组。然后用数组计算avg、max、min等值。

示例(经过测试并完美运行):

String input; // assign the String to be the input

// split the input by spaces and assign every part to an element in the array
String inputArray[] = input.split(" "); 

// get the number of input numbers
double num = inputArray.length - 1; // don't include the last number, -1

double avg = 0; double max = 0; double min = Double.parseDouble(inputArray[0]);

// get the average and min/max numbers
for (int i = 0; i < inputArray.length - 1; i++) // i < inputArray.length - 1 so you don't count the last input, which is -1
{
    avg += Double.parseDouble(inputArray[i]); // for now, set the avg to be the sum of all the numbers

    // if this input is greater than the last greatest one, set the max to be the this input
    if (Double.parseDouble(inputArray[i]) > max) {max = Double.parseDouble(inputArray[i]);}

    // if this input is lesser than the last least one, set the min to be the this input
    if (Double.parseDouble(inputArray[i]) < min) {min = Double.parseDouble(inputArray[i]);}
}
avg = avg / num; // complete the average calculation by diving by total number of inputs
avg = (double)Math.round(avg * 100) / 100; // round the average to two decimal places

接下来,只需将值显示到控制台:这是一个简单的 Google 搜索。与输入输入行相同。

于 2013-10-04T01:38:53.543 回答
0

首先使用 arg[0],您需要使用 substring 将字符串切割成一组数组变量。然后使用 array.len 或 count 来完成剩下的工作。希望这有帮助。

于 2013-10-04T01:14:12.510 回答