不忽略一个值? import java.util.Scanner; 导入java.util.array; 公共类{ //我在这里调整数组的大小,以便它只计算来自用户的输入 //我想忽略用户的0输入 //我认为错误发生在这里或我的主要方法中 公共静态双[]大小调整数组(双[]数字,双大小){ double[]结果=新的double[(int)大小]; 对于(int i=0;i
//我对计算数学部分没有任何顾虑,但我似乎无法做到这一点,因此我的数组忽略了结束while循环的0。换句话说,我希望在用户输入数字0之前包含每个数字。其他一切都是对的。多谢各位 您有两次不忽略一个值? import java.util.Scanner; 导入java.util.array; 公共类{ //我在这里调整数组的大小,以便它只计算来自用户的输入 //我想忽略用户的0输入 //我认为错误发生在这里或我的主要方法中 公共静态双[]大小调整数组(双[]数字,双大小){ double[]结果=新的double[(int)大小]; 对于(int i=0;i,java,arrays,methods,Java,Arrays,Methods,//我对计算数学部分没有任何顾虑,但我似乎无法做到这一点,因此我的数组忽略了结束while循环的0。换句话说,我希望在用户输入数字0之前包含每个数字。其他一切都是对的。多谢各位 您有两次++size。这意味着您的resizeArray方法无法正常工作: import java.util.Scanner; import java.util.Arrays; public class Improved { //I resize the array here so that it onl
++size
。这意味着您的resizeArray
方法无法正常工作:
import java.util.Scanner;
import java.util.Arrays;
public class Improved {
//I resize the array here so that it only counts inputs from the user
//I want to ignore the 0 input from the user
//I think the error happens here or in my main method
public static double[] resizeArray(double[] numbers, double size) {
double[] result = new double[(int)size];
for (int i = 0; i < Math.min(numbers.length, size); ++i) {
result[i] = numbers[i];
}
return result;
}
//compute average nothing is wrong here
public static double getAverage( double[] numbers) {
double sum = 0;
for (int i = 0; i < numbers.length; ++i)
sum += numbers[i];
double average = sum/numbers.length;
return average;
}
//SD nothing is wrong here
public static double getSD( double[] numbers, double average) {
double sd = 0;
for ( int i = 0; i < numbers.length; ++i)
sd += ((numbers[i] - average)*(numbers[i] - average)/ numbers.length);
double standDev = Math.sqrt(sd);
return standDev;
}
//maximum nothing is wrong here
public static double getMax( double[] numbers) {
double max = numbers[0];
for (int i = 1; i < numbers.length; ++i)
if (numbers[i] > max){
max = numbers[i];
}
return max;
}
//minimum nothing is wrong here
public static double getMin( double[] numbers) {
double min = numbers[0];
for (int i = 1; i < numbers.length; ++i)
if (numbers[i] < min) {
min = numbers[i];
}
return min;
}
//median value nothing is wrong here
public static double getmed( double[] numbers) {
double median;
if (numbers.length % 2 == 0)
median = (((numbers[numbers.length/2 - 1])
+ (numbers[numbers.length/2]))/2);
else
median = numbers[numbers.length/2];
return median;
}
//the problem is in the main method i think or in the call method to resize
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
double[] statArr = new double[99];
double size = 0;
int i = 0;
System.out.println("Type your numbers: ");
double number = input.nextDouble();
//I don't want the zero in the array, I want it to be excluded
while (number != 0){
statArr[i] = number;
i++;
number = input.nextDouble();
++size;
if ( size == statArr.length) {
statArr = resizeArray(statArr, statArr.length * 2);
}
++size;
}
statArr = resizeArray(statArr, size);
java.util.Arrays.sort(statArr);
double average = getAverage(statArr);
System.out.println( "The average is " + getAverage(statArr));
System.out.println( "The standard deviation is " + getSD(statArr, average));
System.out.println( "The maximum is " + getMax(statArr));
System.out.println( "The minimum is " + getMin(statArr));
}
}
在这里,你分配的比你实际需要的更多。这就是为什么数组中会出现零。Java数组初始化为0(对于数字基元类型)
正如Giodude已经评论的那样,我建议您每次都使用List
实现(通常是ArrayList
)而不是数组
另外,
size
可以声明为int
,并避免使用该类型(并节省一些极少量的内存),您不会在任何地方将其用作double
。我想您正在使用。我对此表示怀疑。如果用户输入0.0,则条件编号=0将为假。毫无疑问,使用ArrayList和Collections.sort()而不是手动调整大小的数组(ArrayList就是这样做的!)可能会更好。另外,你应该在调试器中运行你的代码,找出为什么它不能达到你期望的效果。@Giodude你是对的,先生。绝对正确。接得好。我坚持我的意见,使用ArrayList可以避免这个问题。@Giodude使用列表肯定更好。Java101:除非你真的不能,否则一定要使用列表!
double[] result = new double[(int)size];