Java prefixAverages/array帮助
我试图将两个独立的算法翻译成Java代码,以便对它们进行测试;第一种算法(PrefixAverages1)是: 输出:一个由数字组成的n元素数组,其中A[i]是元素X[0],X[1],…,X[i]的平均值 这是我为PrefixAverages1提出的Java翻译:Java prefixAverages/array帮助,java,arrays,algorithm,Java,Arrays,Algorithm,我试图将两个独立的算法翻译成Java代码,以便对它们进行测试;第一种算法(PrefixAverages1)是: 输出:一个由数字组成的n元素数组,其中A[i]是元素X[0],X[1],…,X[i]的平均值 这是我为PrefixAverages1提出的Java翻译: import java.util.Arrays; public class PrefixAverages1 { static double array[] = new double[10]; public static void
import java.util.Arrays;
public class PrefixAverages1 {
static double array[] = new double[10];
public static void prefixAverages(){
for (int i = 0; i < 10; i++){
double s = array[i];
for (int j = 0; j < 10; j++){
s = s + array[j];
}
array[i] = s / (i + 1);
System.out.println(Arrays.toString(array));
}
}
public static void main(String[] args){
prefixAverages();
}
}
输出:一个由数字组成的n元素数组,其中A[i]是元素X[0],X[1],…,X[i]的平均值
这是我为PrefixAverages2设计的Java翻译:
import java.util.Arrays;
public class PrefixAverages2 {
static double array[] = new double[10];
public static void prefixAverages(){
double s = 0;
for (int i = 0; i < 10; i++){
s = s + array[i];
array[i] = s / (i + 1);
}
array[0] = 10;
System.out.println(Arrays.toString(array));
}
public static void main(String[] args){
prefixAverages();
}
}
导入java.util.array;
公共类前缀平均值2{
静态双数组[]=新双数组[10];
公共静态void prefixAverages(){
双s=0;
对于(int i=0;i<10;i++){
s=s+数组[i];
数组[i]=s/(i+1);
}
数组[0]=10;
System.out.println(array.toString(array));
}
公共静态void main(字符串[]args){
prefixAverages();
}
}
我正在尝试测试算法,但不确定从哪里开始。我试图建立一个数组,然后通过手动运行这些算法来应用它们,以获得较小的n值
从何处/如何开始向数组添加元素
我还试图通过计算基元运算来分析这两种算法,并推导出这两种算法的T(n)。我希望能够计算出每种算法的时间复杂度(大Oh,O(n)),并发现哪种算法最有效
在此方面的任何帮助都将不胜感激
感谢您花时间阅读和帮助。首先,您应该将数组传递给函数并返回结果
public static double[] prefixAverages(double[] inArray) {
double[] outArray = new double[inArray.length];
//...compute the averages...
return outArray;
}
然后,您可以使用主方法进行一些手动测试:
public static void main(String... args) {
System.out.println(
Arrays.equals(
prefixAverages(new double[] {1, 2, 3, 4}),
new double[] {1, 1.5, 2, 2.5}
)
);
}
确保此代码打印为true
现在,由于浮点数的精度限制,这不是一个非常健壮的解决方案,但它应该让您开始。如果您想真正研究代码测试,您应该使用测试工具进行研究,例如。首先,您应该将数组传递给函数并返回结果
public static double[] prefixAverages(double[] inArray) {
double[] outArray = new double[inArray.length];
//...compute the averages...
return outArray;
}
然后,您可以使用主方法进行一些手动测试:
public static void main(String... args) {
System.out.println(
Arrays.equals(
prefixAverages(new double[] {1, 2, 3, 4}),
new double[] {1, 1.5, 2, 2.5}
)
);
}
确保此代码打印为true
现在,由于浮点数的精度限制,这不是一个非常健壮的解决方案,但它应该让您开始。如果你真的想测试你的代码,你应该研究使用测试工具,比如。你使用一个数组作为输入和输出有什么好的理由吗?你应该把两者分开,至少现在是这样。您的第一个实现肯定无法工作,因为您将覆盖阵列中稍后需要阅读的部分。@Mark谢谢您的回复,Mark。我只是按照算法伪代码所说的去做,但也许我做了一些错误的事情,正如你所说的。您能建议一种替代方法吗?非常感谢。米克,看看你的伪代码。它使用不同的数组进行输出和输入(
a[]
vsX[]
)。您使用一个数组进行输入和输出是否有充分的理由?你应该把两者分开,至少现在是这样。您的第一个实现肯定无法工作,因为您将覆盖阵列中稍后需要阅读的部分。@Mark谢谢您的回复,Mark。我只是按照算法伪代码所说的去做,但也许我做了一些错误的事情,正如你所说的。您能建议一种替代方法吗?非常感谢。米克,看看你的伪代码。它使用不同的数组进行输出和输入(a[]
vsX[]
)。感谢大家的帮助-您的评论帮助我解决了问题!谢谢你们的帮助,你们的评论帮助我解决了我的问题!