在java中传递数组以获得平均中值和模式
我正在尝试使用java传递数组,以获得java中的平均值、中值、模式、最大值和最小值。我目前在将数组传递给函数并返回其值以便输出结果时遇到问题。我相信我有正确的循环,以解决平均中位数和模式,但我不能让他们发送和接收想要的。如何传递数组并发回所需的值 更新:我已经更新了它将编译的代码,我可以输入年数,但在那之后我会出现几个错误。它也没有打印输出 线程“main”java.util.UnknownFormatConversionException中的异常:Conversion='i' 在java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2646) 位于java.util.Formatter$FormattSpecifier(Formatter.java:2675) 位于java.util.Formatter.parse(Formatter.java:2528) 位于java.util.Formatter.format(Formatter.java:2469) 位于java.io.PrintStream.format(PrintStream.java:970) 位于java.io.PrintStream.printf(PrintStream.java:871) la5cs1110_woodspl_03.pkg17.pkg2016.la5cs1110_woodspl_03172016.main(la5cs1110_woodspl_03172016.java:56) Java结果:1在java中传递数组以获得平均中值和模式,java,arrays,mean,mode,median,Java,Arrays,Mean,Mode,Median,我正在尝试使用java传递数组,以获得java中的平均值、中值、模式、最大值和最小值。我目前在将数组传递给函数并返回其值以便输出结果时遇到问题。我相信我有正确的循环,以解决平均中位数和模式,但我不能让他们发送和接收想要的。如何传递数组并发回所需的值 更新:我已经更新了它将编译的代码,我可以输入年数,但在那之后我会出现几个错误。它也没有打印输出 线程“main”java.util.UnknownFormatConversionException中的异常:Conversion='i' 在java.u
public static void main(String[] args) {
int i;
List<Double> hArray = new ArrayList<>();
int nYears = 0, y = 0;
double rMax = 0.00,rMin = 100.00;
//get input check if between 1-80
while(y == 0){
String userData = JOptionPane.showInputDialog
("Enter number of years");
nYears = Integer.parseInt(userData);
if (nYears > 1 && nYears <= 80 )
y = 1;
}
y = 0;
while(y <= nYears){
for(i = 0; i < 12; i++){
Random rand = new Random();
double rNum = rand.nextFloat() * (rMax - rMin) + rMin;
hArray.add(rNum);
}
double mean = getMean (hArray);
double median = getMedian (hArray);
double mode = getMode (hArray);
double max = getMaxValue(hArray);
double min = getMinValue (hArray);
System.out.printf("In year %i the Mean = %d , mode = %d, median = %d," +
" max = %d, min = %d", y , mean, median, mode, max, min);
y++;
}
}
private static double getMean(List<Double> hArray) {
double sum = 0;
for (int i = 0; i < hArray.size(); i++) {
sum += hArray.get(i);
}
return sum / hArray.size();
}
//Median
private static double getMedian(List<Double> hArray) {
int middle = hArray.size()/2;
if (hArray.size() %2 == 1) {
return hArray.get(middle);
} else {
return (hArray.get(middle-1) + hArray.get(middle)) / 2.0;
}
}
//Mode
public static double getMode(List<Double> hArray) {
double maxValue = 0, maxCount = 0;
for (int i = 0; i < hArray.size(); ++i) {
int count = 0;
for (int j = 0; j < hArray.size(); ++j) {
if (hArray.get(j) == hArray.get(i)) ++count;
}
if (count > maxCount) {
maxCount = count;
maxValue = hArray.get(i);
}
}
return maxValue;
}
public static double getMaxValue(List<Double> hArray){
double maxValue = hArray.get(0);
for(int i=1;i < hArray.size();i++){
if(hArray.get(i) > maxValue){
maxValue = hArray.get(i);
}
}
return maxValue;
}
public static double getMinValue(List<Double> hArray){
double minValue = hArray.get(0);
for(int i=1;i<hArray.size();i++){
if(hArray.get(i) < minValue){
minValue = hArray.get(i);
}
}
return minValue;
}
}
publicstaticvoidmain(字符串[]args){
int i;
List hArray=new ArrayList();
int nYears=0,y=0;
双rMax=0.00,rMin=100.00;
//如果介于1-80之间,则获取输入检查
而(y==0){
字符串userData=JOptionPane.showInputDialog
(“输入年数”);
nYears=Integer.parseInt(userData);
如果(nYears>1&&nYears最大值){
maxValue=hArray.get(i);
}
}
返回最大值;
}
公共静态双getMinValue(列表)
double minValue=hArray.get(0);
对于(int i=1;i您的hArray
是一个列表。您应该首先将其转换为数组
getMean(hArray.toArray)
签出。您的hArray
是一个列表。您应该首先将其转换为数组
getMean(hArray.toArray)
签出。将试图将单个元素从数组传递到统计函数的部分替换为使用整个数组的调用,并更改调用的签名,以便它们采用列表
参数,而不是双[]
。类似于以下内容:
double mean = getMean (hArray);
double median = getMedian (hArray);
double mode = getMode (hArray);
double max = getMaxValue(hArray);
double min = getMinValue (hArray);
//Mean
private static double getMean(List<Double> hArray) {
double sum = 0;
for (int i = 0; i < hArray.size(); i++) {
sum += hArray.get(i);
}
return sum / hArray.size();
}
double mean=getMean(哈雷);
双中位数=getMedian(哈雷);
双模式=getMode(哈雷);
double max=getMaxValue(哈雷);
双最小值=getMinValue(哈雷);
//卑鄙
私有静态双getMean(列表hArray){
双和=0;
对于(int i=0;i
另见:
中位数的固定值:
直接从上面的链接复制,稍作修改即可使用列表作为参数
public Double median(List<Double> list)
{
Double[] array = list.toArray(new Double[list.size()]);
Arrays.sort(data);
if (data.length % 2 == 0)
{
return (data[(data.length / 2) - 1] + data[data.length / 2]) / 2.0;
}
else
{
return data[data.length / 2];
}
}
公共双中位数(列表)
{
Double[]数组=list.toArray(新的Double[list.size()]);
数组。排序(数据);
if(data.length%2==0)
{
返回(data[(data.length/2)-1]+data[data.length/2])/2.0;
}
其他的
{
返回数据[data.length/2];
}
}
修正模式:
public Double mode(List<Double> list)
{
java.util.TreeMap<Double,Integer> map = new java.util.TreeMap<>();
Double maxVal = null;
int maxCount = 0;
for (Double d : list) {
int count = 0;
if (map.containsKey(d)) {
count = map.get(d) + 1;
} else {
count = 1;
}
map.put(d, count);
if (count > maxCount) {
maxVal = d;
maxCount = count;
}
}
return maxVal;
}
公共双模式(列表)
{
java.util.TreeMap map=new java.util.TreeMap();
Double maxVal=null;
int maxCount=0;
用于(双d:列表){
整数计数=0;
if(集装箱图(d)){
count=map.get(d)+1;
}否则{
计数=1;
}
地图放置(d,计数);
如果(计数>最大计数){
maxVal=d;
最大计数=计数;
}
}
返回maxVal;
}
将试图将单个元素从数组传递到统计函数的部分替换为使用整个数组的调用,并更改调用的签名,以便调用采用列表
参数,而不是双[]
。类似于以下内容:
double mean = getMean (hArray);
double median = getMedian (hArray);
double mode = getMode (hArray);
double max = getMaxValue(hArray);
double min = getMinValue (hArray);
//Mean
private static double getMean(List<Double> hArray) {
double sum = 0;
for (int i = 0; i < hArray.size(); i++) {
sum += hArray.get(i);
}
return sum / hArray.size();
}
double mean=getMean(哈雷);
双中位数=getMedian(哈雷);
双模式=getMode(哈雷);
double max=getMaxValue(哈雷);
双最小值=getMinValue(哈雷);
//卑鄙
私有静态双getMean(列表hArray){
双和=0;
对于(int i=0;i
另见:
中位数的固定值:
直接从上面的链接复制,稍作修改即可使用列表作为参数
public Double median(List<Double> list)
{
Double[] array = list.toArray(new Double[list.size()]);
Arrays.sort(data);
if (data.length % 2 == 0)
{
return (data[(data.length / 2) - 1] + data[data.length / 2]) / 2.0;
}
else
{
return data[data.length / 2];
}
}
公共双中位数(列表)
{
Double[]数组=list.toArray(新的Double[list.size()]);
数组。排序(数据);
if(data.length%2==0)
{
返回(data[(data.length/2)-1]+data[data.length/2])/2.0;
}
其他的
{
返回数据[data.length/2];
}
}
修正模式:
public Double mode(List<Double> list)
{
java.util.TreeMap<Double,Integer> map = new java.util.TreeMap<>();
Double maxVal = null;
int maxCount = 0;
for (Double d : list) {
int count = 0;
if (map.containsKey(d)) {
count = map.get(d) + 1;
} else {
count = 1;
}
map.put(d, count);
if (count > maxCount) {
maxVal = d;
maxCount = count;
}
}
return maxVal;
}
公共双模式(列表)
{
java.util.TreeMap map=new java.util.TreeMap();
Double maxVal=null;
int maxCount=0;
用于(双d:列表){
整数计数=0;
if(集装箱图(d)){
count=map.get(d)+1;
}否则{
计数=1;
}
地图放置(d,计数);
如果(计数>最大计数){
maxVal=d;
最大计数=计数;
}
}
返回maxVal;
}
这不会编译,您尝试将一个双精度
传递给一个方法,该方法需要一个双精度[]
。因此,您必须更改方法的参数并使用列表,只需传入哈雷
(请参阅Tibrogargan答案-即,您必须修改每个实现)或执行以下操作:
创建一个Double[]
Double[] hArray2 = hArray.toArray(new Double[hArray.size()]);
private static double getMean(Double[] hArray) { ...}
更改您的方法的签名,使它们期望一个Double[]
Double[] hArray2 = hArray.toArray(new Double[hArray.size()]);
private static double getMean(Double[] hArray) { ...}
通过hArray2
而不是hArray
double mean = getMean(hArray2);
// ...
应该是这样。这不会编译,您尝试将双精度
传递给一个方法,该方法需要双精度[]
。因此您必须更改参数