我有一个类似的问题:Finding average using three methods and a for loop in java 除了我们还没有学过数组。如何通过不使用数组获得相同的解决方案?基本上我要问的是你如何取一个字符串中所有数字的平均值?
unwanted
答案 0 :(得分:0)
假设您已经知道如何解析字符串中的数字,这将是第一步,和另一个问题,如果您不 ..然后你可以使用一种方法:
public static float additiveAverage(float currentAverage, int count, float newValue){
return currentAverage + (newValue - currentAverage) / count;
}
用法示例:
public static void main(String[] args) {
float average = 0;
average = additiveAverage(average, 1, 1);
average = additiveAverage(average, 2, 2);
average = additiveAverage(average, 3, 4);
average = additiveAverage(average, 4, 8);
average = additiveAverage(average, 5, 16);
System.out.println(average); //Should give you 6.2
}
当你了解数组时,这是一个我不介意分享的方法,直接来自我的个人" utils"库:
public static decimal Average(params decimal[] numbers) {
if (numbers == null) throw new ArgumentNullException(nameof(numbers), "is null.");
var average = 0m;
for (var i = 0; i < numbers.Length; i++)
average += (numbers[i] - average) / (i + 1);
return average;
}
它在 C#;但它与Java非常相似。
答案 1 :(得分:0)
不使用数组,您仍然可以轻松地使用for循环和方法。
首先,确定您最初想要使用的方法。 使用三种方法,我们可以使用averagre方法,消息方法和main方法。
让我们首先使用averager方法。
解决这个问题的一个好方法是用伪代码编写它,以便更容易地想象你想做什么。我建议让你的averager方法看起来像这样
public static double averager(Scanner input){
double average;
int i = 0;
System.out.println("Enter numbers to be averaged, press c to calculate");
for (i = 0; i < 100; i++);
{
String number = input.nextLine();
if (number.equalsIgnoreCase(c)
{
break;
}
else
{
average += Integer.parseInt(number);
i++
}
}
return average / i;
我们将消息计算出来,因此我们知道他们何时想要计算它。 请注意我如何将Scanner作为参数,这使我们可以在以后减少主方法中的代码量。
现在我们还剩2个方法,我们可以创建一个消息方法来返回一个String
public static String message(double average)
{
return System.out.println("The average of the numbers is " + average");
}
此方法接受我们计算的平均值,然后返回带有信息
的String最后,我们可以使用我们的主要方法来利用所有方法。
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
double average = averager(input);
message(average);
}
请注意,此代码不会检查是否有任何无效输入(输入不是数字) 但是,您可以通过添加一些if条件
轻松完成此操作答案 2 :(得分:-1)
我知道这不是优化的事情。您可以通过使用字符串生成器从字符串构建数字然后将其解析为int来改进它。
import java.util.Scanner;
public class Average {
public static void main(String[] args) {
String input = getUserInput();
System.out.print("Average is "+helper(input));
}
public static String getUserInput(){
Scanner scan = new Scanner(System.in);
System.out.print("Please enter up to ten numbers in one line: ");
return scan.nextLine();
}
public static double helper(String numListStr){
int sum=0;
String numberStr="";
numListStr+=" ;";
int i=0;
int numbers=0;
while(numListStr.charAt(i)!=';') {
if(numListStr.charAt(i)!=' '){
numberStr+= numListStr.charAt(i);
}
else{
sum+= Integer.parseInt(numberStr);
numberStr="";
numbers++;
}
i++;
}
return computeAverage(sum,numbers);
}
public static double computeAverage(int sum,int numLength){
return sum/numLength;
}
}