Java 将方法中的数据类型应用于主tester类中的变量时出错
我怎样才能得到它来计算关于double数组的属性呢。如果里面的其他东西都是int,那它还会是一个双精度数组吗?还是因为方法类型的原因,它仍然是一个双精度数组?这是我的班级。非常感谢Java 将方法中的数据类型应用于主tester类中的变量时出错,java,arrays,methods,statistics,Java,Arrays,Methods,Statistics,我怎样才能得到它来计算关于double数组的属性呢。如果里面的其他东西都是int,那它还会是一个双精度数组吗?还是因为方法类型的原因,它仍然是一个双精度数组?这是我的班级。非常感谢 import java.util.*; import java.lang.Math; public class Statistics { private double min; private double max; private double mean; private doub
import java.util.*;
import java.lang.Math;
public class Statistics {
private double min;
private double max;
private double mean;
private double median;
private double deviation;
private double mode;
public static double findMin(int[] array){
int min = array[0];
for(int i=1;i<array.length;i++){
if(array[i] < min){
min = array[i];
}
}
return min;
}
public static double findMax(int[] array){
int max = array[0];
for(int i=1;i<array.length;i++){
if(array[i]>max){
max=array[i];
}
}
return max;
}
public static double calcMean(int[] n){
int sum=0;
for (int i=0; i<n.length; i++){
sum+= n[i];
}
return sum/n.length;
}
public static double calcMedian(int[] n){
int middle = n.length/2;
if (n.length%2==1){
return n[middle];
} else {
return (n[middle]+n[middle])/2;
}
}
public static double calcDeviation(int[] n){
int mean = (int)calcMean(n);
int squareSum = 0;
for (int i = 0; i < n.length; i++) {
squareSum += Math.pow(n[i] - mean, 2);
}
return Math.sqrt((squareSum) / (n.length - 1));
}
public static double calcMode(int n[]){
int value=0; int max=0;
for (int i=0;i<n.length;++i){
int count=0;
for (int j=0; j<n.length; ++j){
if (n[j]==n[i]) ++count;
}
if (count>max){
max=count;
value=n[i];
}
}
return value;
}
}
有两个错误:
第一:执行此操作时-test.findMin(num)
您试图传递参数num,但num不是数组!这是一个数字。您可能需要这样做:test.findMin(数组)
第二:您可以隐式地将integer转换为double,因为您可以确保它保持不变。但是不能隐式地将double转换为整数,因为不能将例如2,7转换为整数。对于数组,即使是“隐式”转换也不起作用
对于您的解决方案,更改此行
double array[]=new double[num]代码>到int数组[]=新的int[num]
然后将所有类似于test.findMin(num)
的参数更改为test.findMin(array)
对于使用Double,这将编译(不知道它是否按预期工作):
import java.util.*;
公共类统计测试器{
公共静态void main(字符串[]args){
统计测试=新统计();
扫描仪输入=新扫描仪(System.in);
//读取用户输入。
System.out.print(“您想输入多少个数字?”:”;
int num=input.nextInt();
双数组[]=新的双数组[num];
System.out.println(“立即输入“+num+”数字”);
for(int i=0;i
import java.util.*;
导入java.lang.Math;
公共课统计{
私人双敏;
私人双最大值;
私人双平均;
私人双中位数;
私人双重背离;
私人双模式;
公共静态双findMin(双[]数组){
双最小值=数组[0];
for(int i=1;imax){
max=数组[i];
}
}
返回最大值;
}
公共静态双计算平均值(双[]n){
整数和=0;
for(int i=0;i最大值){
最大值=计数;
数值=n[i];
}
}
返回值;
}
}
将整数传递给只接受数组的方法。别那么做,看来你的论点打错了。您可能想使用array
而不是num
您的方法都采用int[]
s。您有一个double[]
,因此无法将其传递给任何这些方法,因为它不是int[]
。感谢您的帮助!数组只接受整数是真的吗?我尝试在我的方法中使用double,其余的参数使用double。它不起作用。我得到了所有“可能的精度损失”错误。@Lorber是的,这是可能的。非常感谢你的帮助,@libik!我尝试了您的所有更改,但仍然存在这些错误。java:16:发现可能的精度损失:需要加倍:int数组[]=new int[num];^java:20:发现可能的精度损失:需要加倍:int数组[i]=input.nextDouble()@Lorber-看起来你有input.nextDouble()
在那里,只要把它改成input.nextInt()
(只需每改一次整数)好的,我改了。现在一切都正常了,你真是太棒了,但即使我只能输入整数,这算是一个双倍数组吗?或者double数组只意味着计算结果,而不一定是我可以在数组中输入的数字吗?如果某个东西是double类型的,那么您输入的所有内容都保存为double,并计算为double。没有“我是怎么得到这个数字的”或“这个双精度也是整数”的记忆。所以,即使你“知道”你不能把任何非整数放入双变量中,编译器也不知道。我感谢你的回答,libik。在我做了你的编辑之后,我被要求输入我想要输入的数字,如果我输入一个双精度的,我会得到这个错误
import java.util.*;
public class StatisticsTester {
public static void main(String[] args) {
Statistics test = new Statistics();
Scanner input = new Scanner(System.in);
//Read user input.
System.out.print("How many numbers do you want to enter?: ");
int num = input.nextInt();
double array[] = new double[num];
System.out.println("Enter the " + num + "numbers now.");
for (int i = 0; i < array.length; i++ )
{
array[i] = input.nextInt();
}
System.out.print("Here is the minimum, ");
System.out.print("maximum, mean, median, ");
System.out.println("mode, and standard deviation: ");
System.out.print(test.findMin(num) +", " + test.findMax(num));
System.out.print(", "+ test.calcMean(num) +", ");
System.out.print(test.calcMedian(num) +", ");
System.out.print(test.calcMode(num) +", ");
System.out.print(test.calcDeviation(num));
}
}
StatisticsTester.java:25: findMin(int[]) in Statistics cannot be applied to (int)
System.out.print(test.findMin(num) +", " + test.findMax(num));
^
StatisticsTester.java:25: findMax(int[]) in Statistics cannot be applied to (int)
System.out.print(test.findMin(num) +", " + test.findMax(num));
^
StatisticsTester.java:26: calcMean(int[]) in Statistics cannot be applied to (int)
System.out.print(", "+ test.calcMean(num) +", ");
^
StatisticsTester.java:27: calcMedian(int[]) in Statistics cannot be applied to (int)
System.out.print(test.calcMedian(num) +", ");
^
StatisticsTester.java:28: calcMode(int[]) in Statistics cannot be applied to (int)
System.out.print(test.calcMode(num) +", ");
^
StatisticsTester.java:29: calcDeviation(int[]) in Statistics cannot be applied to (int)
System.out.print(test.calcDeviation(num));
^
6 errors
import java.util.*;
public class StatisticsTester {
public static void main(String[] args) {
Statistics test = new Statistics();
Scanner input = new Scanner(System.in);
//Read user input.
System.out.print("How many numbers do you want to enter?: ");
int num = input.nextInt();
double array[] = new double[num];
System.out.println("Enter the " + num + "numbers now.");
for (int i = 0; i < array.length; i++) {
array[i] = input.nextDouble();
}
System.out.print("Here is the minimum, ");
System.out.print("maximum, mean, median, ");
System.out.println("mode, and standard deviation: ");
System.out.print(test.findMin(array) + ", " + test.findMax(array));
System.out.print(", " + test.calcMean(array) + ", ");
System.out.print(test.calcMedian(array) + ", ");
System.out.print(test.calcMode(array) + ", ");
System.out.print(test.calcDeviation(array));
}
}
import java.util.*;
import java.lang.Math;
public class Statistics {
private double min;
private double max;
private double mean;
private double median;
private double deviation;
private double mode;
public static double findMin(double[] array) {
double min = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i] < min) {
min = array[i];
}
}
return min;
}
public static double findMax(double[] array) {
double max = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
}
}
return max;
}
public static double calcMean(double[] n) {
int sum = 0;
for (int i = 0; i < n.length; i++) {
sum += n[i];
}
return sum / n.length;
}
public static double calcMedian(double[] n) {
int middle = n.length / 2;
if (n.length % 2 == 1) {
return n[middle];
} else {
return (n[middle] + n[middle]) / 2;
}
}
public static double calcDeviation(double[] n) {
int mean = (int) calcMean(n);
int squareSum = 0;
for (int i = 0; i < n.length; i++) {
squareSum += Math.pow(n[i] - mean, 2);
}
return Math.sqrt((squareSum) / (n.length - 1));
}
public static double calcMode(double n[]) {
double value = 0;
int max = 0;
for (int i = 0; i < n.length; ++i) {
int count = 0;
for (int j = 0; j < n.length; ++j) {
if (n[j] == n[i]) {
++count;
}
}
if (count > max) {
max = count;
value = n[i];
}
}
return value;
}
}