2017-02-23 191 views
-3

Так что эта ситуация немного разочаровывает меня, потому что мой учитель онлайн предпочитает нам просто изучать уроки онлайн самостоятельно и везде, где я смотрел, я до сих пор не могу узнать, как полностью использовать no-args.No-args constructor

Следующая программа, которую я создаю, однако, как я ее знаю, я не могу запустить ее без основного, но всякий раз, когда я вхожу в главную, она не запускает конструкцию no-args, и я вообще не знаю, где я испортить.

import java.util.Scanner; 
public class Week07_Assignment { 

    Scanner input = new Scanner(System.in); 

    private double height = 1; 
    private double width=1; 
    private double h; 
    private double w; 


    public void createrectangle(){ 
     System.out.println("Give me both the height and width of this rectangle"); 
     height = heightgetter(height); 
     width = heightgetter(width); 
     area(height, width); 
     perimeter(height, width); 
    } 

    public double heightgetter(double a){ 
     a = input.nextDouble(); 
     return a; 

    } 

    public double widthgetter(double a){ 
     a = input.nextDouble(); 
     return a; 
    } 

    public void area(double a, double b){ 
     double area = a * b; 
     System.out.println("This is the area: " +area); 

    } 

    public void perimeter(double a, double b){ 
     double perimeter = 2 * (a + b); 
     System.out.println("This is the area: " +perimeter); 

    } 
} 
+2

Метод 'main' является статическим методом, конструктор не вызывается. Если вам нужно вызвать конструктор по умолчанию, вы должны сделать это явно. И если ваш профессор отказывается объяснять вещи, которые его ученики не понимали, ну ... Не хороший профессор ИМО. – BackSlash

+0

, если вы хотите запустить конструктор «Week07_Assignment», тогда вам нужно создать его объект. –

ответ

0

Привет, как @BackSlash, вы можете использовать приведенный ниже код.

public static void main (String[] args) 
{ 
    Week07_Assignment object = new Week07_Assignment(); 

    object.createrectangle(); 

} 
+0

Ты спас меня от самой большой боли в голове недели, спасибо тебе! – zenon

+0

@zenon Не беспокойтесь, у вас может быть основной метод в отдельном классе, называемом программой, например. Таким образом, вы можете разделить свою логику на классы – hoChay

0

ответ hoChay корректна. В дополнение к его комментарию, вот один из способов разделить вашу логику на разные классы.


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

Далее вы должны создать класс, который относится к чтению ввода пользователя (хотя это довольно сложный вопрос для вашего назначения), а именно InputReader.

И наконец, создайте свой класс Main, который будет служить отправной точкой при выполнении кода.

Прямоугольник

package assignment_07; 

public class Rectangle { 
    private double height; 
    private double width; 

    private double area; 
    private double perimeter; 

    public Rectangle(double width, double height) { 
     this.width = width; 
     this.height = height; 
    } 

    public void create() { 
     area(this.height, this.width); 
     perimeter(this.height, this.width); 
    } 

    private double area(double width, double height) { 
     this.area = width * height; 
     return this.area; 
    } 

    private double perimeter(double width, double height) { 
     this.perimeter = 2 * (width + height); 
     return this.perimeter; 
    } 

    public double getPerimeter(){ 
     return this.perimeter; 
    } 

    public double getArea(){ 
     return this.area; 
    } 

    @Override 
    public String toString() { 
     return "Perimeter: " + this.perimeter + "\nArea: " + this.area; 
    } 
} 

InputReader

package assignment_07; 
import java.util.Scanner; 

public class InputReader { 
    private Scanner scanner; 

    public InputReader() { 
     scanner = new Scanner(System.in); 
    } 

    public double readDouble(){ 
     return scanner.nextDouble(); 
    } 
} 

Стартовая точка (Main)

import assignment_07.InputReader; 
import assignment_07.Rectangle; 

public class Main { 
    public static void main(String[] args) { 
     InputReader inputReader = new InputReader(); 

     // Get measurements from user 
     double width = inputReader.readDouble(); 
     double height = inputReader.readDouble(); 

     // Create rectangle 
     Rectangle rectangle = new Rectangle(width, height); 
     rectangle.create(); 

     // Print 
     System.out.println(rectangle); 
    } 
} 

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

+0

Я не понимаю, для чего предназначен «InputReader». это просто обертка вокруг «Сканера» –

+0

Действительно, это единственная его цель. Вот почему я упомянул, что это излишество - это не обязательно. Однако я предположил, что назначение может быть либо больше, чем просто данным описанием, либо использоваться в качестве базы для следующих назначений. Таким образом, если 'InputReader' расширяется, он не запутывает класс' Main'. – mcuenez