为什么我会在这里继续获得.class?通常的问题都不是罪魁祸首

时间:2011-11-03 02:15:56

标签: java arrays methods

在我能找到的所有其他情况中,这是由于代码不在方法或不正确的包围,但我检查了所有这些。我的代码就是这个;

import java.util.*; 
public class averages {
   public static void main(String[] args) 
   {
      //initializing
      double mean = 0;
      double deviation = 0;
      int i = 0;
      double dataset = new double[10];
      double sum = 0;
      double subdev = 0;
      double subsum = 0;
      double dev = 0;

      //getting the numbers
      for (i = 0; i <= 9 ; i++)
      {
         Scanner input = new Scanner(System.in);
         System.out.println("Enter a number");
         dataset[i] = input.nextDouble();
      }

      //calling the function to get 
      avgarray(dataset[]);
      System.out.println("Average is " + mean);
      devequasion(dataset[]);
      System.out.println("Deviation is " + subdev);
   }
   public static double avgarray(double[] arraydata)
   {
      sum = 0;
      for (i = 0; i <= 9 ; i++)
      {
         sum += arraydata[i];
      }
      mean = sum / 10;
      return mean;
   }

   public static double devequasion(double[] devdata)
   {
      subsum = 0;
      for (i = 0; i <= 9 ; i++)
      {
         subsum += devdata[i]*devdata[i];
      }
      dev = math.sqrt((sum - avgarray(devdata[]))/ 9.0);
      return dev;
   }
}

一切看起来都是正确的,但错误不会消失。

4 个答案:

答案 0 :(得分:3)

你有很多问题,例如:

  • 您对数据集的定义不正确。您创建了一个双打数组,然后尝试将其分配给一个双精度数。
  • 您通过dataset[]而不是dataset
  • 您在avgarraydevequasion中使用但未声明的变量(meansumsubsumi,{ {1}})。这些在dev中声明的事实无关紧要。
  • 另外,因为它们只是在方法中使用,所以main中不需要它们,其他main当然不需要。
  • 您不会为数据输入导入i
  • 数学套餐为java.util.Scanner,首都为Math

如果您使用像Eclipse这样的IDE,您会发现更容易查看和修复这些问题。对于初学者来说,这是一个M

如果必须(无头构建,兼容性等),请务必将代码泵入${DEITY}-send作为最后一步,但是使用IDE执行初始开发我会更快地找到很多

这是一个修正了所有语法问题的版本,以及其他一些小的调整,例如删除不必要的变量:

javac

如果是家庭作业,请不要逐字逐句地使用,如果你的教育工作者没有积极地在网上搜索剽窃,你就是愚蠢的。

答案 1 :(得分:0)

问题之一是

double dataset = new double[10];

应该是

double[] dataset = new double[10];

另外

avgarray(dataset[]);

应该是

avgarray(dataset);

答案 2 :(得分:0)

我知道这不是一个修复我的代码板,但是有太多错误让我指出并告诉你在哪里以及如何修复它们。修复和发布整个代码并在大量错误旁边添加注释更容易。您需要了解变量具有范围。

import java.util.*;

public class averages {
   public static void main(String[] args) 
   {
      //initializing
      double dataset[] = new double[10]; // FIXED (added [])

      //getting the numbers
      for (int i = 0; i <= 9 ; i++)
      {
         Scanner input = new Scanner(System.in);
         System.out.println("Enter a number");
         dataset[i] = input.nextDouble();
      }

      //calling the function to get 
      avgarray(dataset); // FIXED (removed [])
      System.out.println("Average is " + avgarray(dataset)); // FIXED (calls avgarray)
      devequasion(dataset);
      System.out.println("Deviation is " + devequasion(dataset)); // FIXED (calls devequasion)
   }
   public static double avgarray(double[] arraydata)
   {
      double sum = 0; // FIXED (sum wasn't declared)
      for (int i = 0; i <= 9 ; i++) // FIXED (i wasn't declared)
      {
         sum += arraydata[i];
      }
      double mean = sum / 10;
      return mean;
   }

   public static double devequasion(double[] devdata)
   {
      double subsum = 0; // FIXED (declared subsum)
      for (int i = 0; i <= 9 ; i++) // FIXED (declared i)
      {
         subsum += devdata[i]*devdata[i];
      }
      // FIXED (removed [], declared dev, changed "sum" to "subsum", "math" to "Math")
      double dev = Math.sqrt((subsum - avgarray(devdata))/ 9.0);
      return dev;
   }
}

这将使其编译,任何破坏的逻辑都取决于你。

编辑:抱歉,我不小心在剪贴板上发布了一个不完整的版本,现在修复了。

EDIT2:还值得一提的是,您应该在for循环中使用array.length,而不是在这些值中进行硬编码。另外,对于循环特定次数,i = 0; i < 10 似乎更清楚,您希望迭代10次而不是i <= 9

答案 3 :(得分:0)

您的代码似乎有3个主要问题:

  1. 您似乎没有掌握Java数组
  2. 您似乎不了解Java范围规则
  3. 与上述相结合,您无法正确处理函数返回值
  4. 我不确定哪一个是您要问的主要问题,但这里有......

    有些事情可能是你已经知道的事情,但我从一开始就开始确保我不会跳过你错过的那一天

    数组是固定大小的值序列。 所以double[10]是一个数组,有10个值,每个值都为double类型 但double本身不是数组,它是double类型的单个值。

    所以这一行:

    double dataset = new double[10];
    

    没有意义。你说的是名为dataset的变量是一个double,但是你试着把一个双精度数组放到那个变量中。这不起作用。

    您希望数据集是一个数组,或者您希望它是单个值,但它不能同时存在。 可能你想要

    double[] dataset = new double[10];
    

    稍后,你有这样的行:

    avgarray(dataset[]);
    devequasion(dataset[]);
    

    这些行不是有效的Java代码 - 看起来你正试图解决将dataset声明为错误类型的问题,但是你的解决方法不正确。

    如果您将数据集的声明更改为double[],那么您可以简单地使用

    avgarray(dataset);
    devequasion(dataset);
    

    它会做你想要的。

    在Java中,每个变量都有范围。范围定义变量存在的时间长度以及可以使用的位置。

    因此,举例来说,您在sum方法中声明了main。这意味着此变量的范围仅限于该方法内部。您不能在另一个方法中使用它(要么获取值,要么设置值) - 即使从main调用其他方法也是如此。这意味着您的avgarray方法内有

    sum = 0;
    

    那是错的。你不能这样做,因为此方法中不存在sum。

    您需要从sum删除main的声明(因为您从未在main中使用过它),而是在avgarray中声明它。

    你有一些需要这种治疗的变量。

    在某些情况下,您在两种不同的方法中使用相同的变量。为此,您需要使变量成为类的成员,而不是方法。

    因此,作为一个例子,如果你想要两个方法来使用mean变量,那么它应该是一个像这样声明的成员变量:

    public class averages
    {
      private static double mean = 0;
      public static void main(String[] args) 
      {
        // ...
    

    但是,这可能不是你正在做的事情的正确方法。

    如果您查看avgarray方法,就会发现返回类型为double

    的值
    public static double/ avgarray(double[] arraydata)
    

    并在方法内正确return mean; 但是当你调用它avgarray(dataset);时,你不会看到返回值。

    您要做的是将 2个变量称为“mean”。一个在main内,一个在avgarray内。由于Java的范围规则,它们是完全不同的变量,恰好具有相同的名称。

    如果您这样做,那么您可以写

    public static void main(String[] args)
    {
       // ....
       double mean = avgarray(dataset);
       // ....
    }
    
    public static double avgarray(double arraydata)
    {
      // ...
      double mean = sum/10;
      return mean;
    }
    

    鉴于其他一些答案为您提供了修复其中一些问题的代码版本,您应该能够将我的解释和修复后的所有内容拼凑在一起。

    祝你好运!