Настройка DrJava для работы через Фридмана / Феллайзена "Маленькая Ява" - PullRequest
0 голосов
/ 01 апреля 2010

All

Я изучаю книгу Фридмана и Фелляйзена "Маленькая Ява, несколько узоров". Я пытаюсь напечатать примеры в DrJava, но получаю некоторые ошибки. Я новичок, поэтому я могу делать ошибки новичка.

Вот то, что я настроил:

public class ALittleJava {
  //ABSTRACT CLASS POINT
  abstract class Point {
    abstract int distanceToO();
  }
  class CartesianPt extends Point {
    int x;
    int y;
    int distanceToO(){
      return((int)Math.sqrt(x*x+y*y));
    }
    CartesianPt(int _x, int _y) {
    x=_x;
    y=_y;
    }
  }
  class ManhattanPt extends Point {
    int x;
    int y;
    int distanceToO(){
      return(x+y);
    }
    ManhattanPt(int _x, int _y){
      x=_x;
      y=_y;
    }
  }
}

А на главной стороне:

public class Main{
  public static void main (String [] args){
    Point y = new ManhattanPt(2,8);
    System.out.println(y.distanceToO());
  }
}

Компилятор не может найти символы Point и ManhattanPt в программе.

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

требуется включающий экземпляр, содержащий ALittleJava.ManhattanPt

Я пытался найти ресурсы в сети, но у этой книги должны быть довольно конфиденциальные читатели, и я не мог найти много.

Спасибо всем.

JDelage

Ответы [ 4 ]

1 голос
/ 26 января 2012

Сделайте так, чтобы ваш файл выглядел так:

//ABSTRACT CLASS POINT
abstract class Point {
  abstract int distanceToO();
}
class CartesianPt extends Point {
  int x;
  int y;
  int distanceToO(){
    return((int)Math.sqrt(x*x+y*y));
  }
  CartesianPt(int _x, int _y) {
    x=_x;
    y=_y;
  }
}
class ManhattanPt extends Point {
  int x;
  int y;
  int distanceToO(){
    return(x+y);
  }
  ManhattanPt(int _x, int _y){
    x=_x;
    y=_y;
  }
}
class Main {
  public static void main (String [] args) {
    Point y = new ManhattanPt(2,8);
    System.out.println(y.distanceToO());
  }
}

Затем на вкладке «Взаимодействия» введите следующую команду:

java Main
1 голос
/ 01 апреля 2010

Теперь, когда я думаю об этом, ALittleJava - это сумасшедшее имя класса, если оно не предназначено для основного класса.

Если вы поставите public static void main( String[] args ) WITHIN ALittleJava, вы сможете использовать эти классы.

0 голосов
/ 01 апреля 2010

Этот код дословно скопирован из книги? Если это так, то эта структура немного необычна - обычно классы определяются по одному на файл (Point.java, CartesionPt.java и т. Д.) И настраиваются таким образом (с использованием внутренних классов) только в особых случаях.

0 голосов
/ 01 апреля 2010

Сделайте ваши внутренние классы static, в противном случае вам потребуется доступ к вашим внутренним классам из экземпляра ALittleJava, такого как ALittleJava java = new ALittleJava(), который, кажется, не соответствует вашему варианту использования.

static внутренние классы не могут видеть членов своего включающего класса, и, если классы нестатические, наоборот, они МОГУТ видеть членов своего включающего класса, и фактически требуется включающий экземпляр.

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