Почему я продолжаю получать .class ожидается здесь?Ни одна из обычных проблем не является виновником - PullRequest
0 голосов
/ 03 ноября 2011

Во всех других случаях, которые я мог найти, это было из-за того, что в коде нет метода или неправильных скобок, однако я проверил все это.Мой код такой:

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 ]

3 голосов
/ 03 ноября 2011

У вас там довольно много проблем, таких как:

  • Ваше определение набора данных неверно. Вы создаете массив значений типа double, а затем пытаетесь присвоить его одному типу double.
  • Вы передаете dataset[] вместо dataset.
  • В avgarray и devequasion имеются переменные, которые используются, но не объявлены (mean, sum, subsum, i, dev). Тот факт, что они объявлены в main, не имеет значения.
  • Кроме того, поскольку они только используются в методах, они не нужны в main, кроме i, конечно).
  • Вы не импортируете java.util.Scanner для ввода данных.
  • Математический пакет Math с большой буквы M.

Если вы используете IDE, например Eclipse, вам будет намного легче увидеть и исправить эти проблемы. Для начинающих это ${DEITY}-send.

Во что бы то ни стало закачайте ваш код в javac в качестве последнего шага, если вам нужно (сборки без головы, совместимость и т. Д.), Но начальную разработку с IDE вы найдете. намного быстрее.

Вот версия со всеми исправленными синтаксическими проблемами и некоторыми другими незначительными изменениями, такими как удаление ненужных переменных:

import java.util.Scanner;

public class testprog {
    public static void main (String[] args) {
        double[] dataset = new double[10];

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

        System.out.println ("Average is " + avgarray (dataset));
        System.out.println ("Deviation is " + devequasion (dataset));
    }

    public static double avgarray (double[] arraydata) {
        double sum = 0;
        for (int i = 0; i <= 9 ; i++)
            sum += arraydata[i];
        return sum / 10;
    }

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

Не используйте это дословно, если это домашнее задание, было бы глупо полагать, что ваши преподаватели не занимались поиском плагиата в Интернете.

0 голосов
/ 03 ноября 2011

Похоже, у вас есть 3 основные проблемы, которые возникают в вашем коде:

  1. Похоже, вы не разбираетесь в массивах Java
  2. Вы, кажется, непонимать правила определения содержания Java
  3. В сочетании с вышеизложенным вы неправильно обрабатываете возвращаемые значения функции

Я не уверен, какая из них является основной проблемой, которую вы задаетео, но здесь идет ...

Что-то, вероятно, это то, что вы уже знаете, но я начинаю с самого начала, чтобы убедиться, что я не пропущу ту часть, которую вы пропустили

Массив представляет собой последовательность значений фиксированного размера.Итак, double[10] - это массив с 10 значениями, каждое из которых типа double. Но double само по себе не является массивом, это одно значение типа double.

Итак, эта строка:

double dataset = new double[10];

не имеет смысла.Вы говорите, что переменная с именем dataset является двойным, но затем вы пытаетесь поместить массив двойных в эту переменную.Это не работает.

Либо вы хотите, чтобы набор данных был массивом, либо вы хотите, чтобы он был одним значением, но это не может быть и то и другое.Возможно, вы захотите

double[] dataset = new double[10];

Позже у вас появятся такие строки:

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

Эти строки не являются допустимым кодом Java - похоже, вы пытаетесь обойтипроблема в объявлении dataset неправильным типом, но вы работаете не правильно.

Если вы измените объявление набора данных на double[], тогда вы можете просто иметь

avgarray(dataset);
devequasion(dataset);

и он будет делать то, что вы хотите.

В Java каждая переменная имеет scope .Область действия определяет, как долго существует переменная и где ее можно использовать.

Итак, в качестве примера вы объявляете sum внутри вашего main метода.Это означает, что эта переменная может существовать только внутри этого метода.Вы не можете использовать его (либо для получения значения, либо для установки значения) в другом методе - даже если этот другой метод вызывается из main.Это означает, что внутри вашего avgarray метода, где у вас есть

sum = 0;

, это неправильно.Вы не можете сделать это, потому что сумма не существует внутри этого метода.

Вам нужно удалить объявление 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;
}

Учитывая, что некоторые другие ответы имеютпредоставив вам версии вашего кода, исправляющие некоторые из этих проблем, вы сможете собрать все это из моих объяснений и их исправлений.

Удачи!

0 голосов
/ 03 ноября 2011

Я знаю, что это не доска с исправлениями моего кода, но было слишком много ошибок, чтобы я мог указать вам и сказать, где и как их исправить.Проще было просто исправить и опубликовать весь код и добавлять комментарии рядом с огромным количеством ошибок.Вы должны понимать, что переменные имеют область видимости.

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: Стоит также упомянуть, что вы должны использовать array.length в ваших циклах for, а не жесткое кодирование в этих значениях,Также для цикла определенное количество раз, i = 0; i< 10 может показаться более ясным, что вы хотите выполнить итерацию 10 раз, а не i <= 9.

0 голосов
/ 03 ноября 2011

Одной из проблем является

double dataset = new double[10];

должно быть

double[] dataset = new double[10];

Также

avgarray(dataset[]);

должно быть

avgarray(dataset);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...