2013-03-15 12 views
-1

Мне было поручено выполнить перегрузку метода в наследовании в java, разработав программу, которая вычисляет периметр разных фигур, я разработал код, как показано ниже но когда я пытаюсь скомпилировать, возникают ошибки.java-программа для вычисления периметра квадрата, круга, прямоугольника и треугольника

import java.io.*; 
import java.util.*; 
public class Perimeter { 
public double getperimeter(int constant,double pi,double radius){ 
return(constant*pi*radius); 
} 
public double getperimeter(int sconstant,double length){ 
return(sconstant*length); 
} 
public double getperimeter(int rconstant,double rlength,double widith){ 
return(rconstant*(rlength+widith)); 
} 
public double getperimeter(double base,double height,double hypotenuse){ 
return(base+height+hypotenuse); 
} 
public void main (String args []){ 
final double pi=22/7; 
final int constant=2; 
double raduius; 

final int sconstant=4; 
double length; 

final int rconstant=2; 
double rlength; 
double widith; 

double base; 
double height; 
double hypotenuse; 

Perimeter g= new Perimeter(); 
Scanner s=new scanner(System.in); 
System.out.println("Enter The Radius"); 
g.radius=s.nextDouble(); 
System.out.println("Enter The Square Length"); 
g.lenght=s.nextInt(); 
System.out.println("Enter The Rectangle Lenght"); 
g.rlength=s.nextInt(); 
System.out.println("Enter The Rectangle widith"); 
g.widith=s.nextInt(); 
System.out.println("Enter The Triangle Base"); 
g.base=s.nextInt(); 
System.out.println("Enter The Triangle height"); 
g.height=s.nextInt(); 
System.out.println("Enter The Triangle hypotenuse"); 
g.hypotenuse=s.nextInt(); 

System.out.println("Perimeter = " + g.getperimeter(constant,pi,radius)); 
System.out.println("Perimeter = " + g.getperimeter(sconstant,length)); 
System.out.println("Perimeter = " + g.getperimeter(rconstant,rlength,widith)); 
System.out.println("Perimeter = " + g.getperimeter(base,height,hypotenuse)); 
+7

это ** место ошибка конкурс ** ?? то, я могу заметить одну ошибку, у вас нет закрывающей скобки для вашего основного и вашего класса ..: P – PermGenError

+0

, и его основной метод не является статическим недействительным, он просто недействителен. –

+0

Это поможет узнать, какие ошибки вы получите. –

ответ

4

Вы определяете два метода с одной и той же сигнатурой внутри одного класса. Это ошибка. Ваши методы:

double getperimeter(int constant,double pi,double radius); 
double getperimeter(int rconstant,double rlength,double widith); 

Кроме того, ваш основной метод должен быть объявлен как статический

+1

Это не единственная ошибка, с которой он имеет btw , –

0

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

public void main (String args []){ 
final double pi=22/7; 
final int constant=2; 
double raduius; 

final int sconstant=4; 
double length; 

final int rconstant=2; 
double rlength; 
double widith; 

double base; 
double height; 
double hypotenuse; 

Perimeter g= new Perimeter(); 
Scanner s=new scanner(System.in); 
System.out.println("Enter The Radius"); 
radius=s.nextDouble(); 
System.out.println("Enter The Square Length"); 
lenght=s.nextInt(); 
System.out.println("Enter The Rectangle Lenght"); 
rlength=s.nextInt(); 
System.out.println("Enter The Rectangle widith"); 
widith=s.nextInt(); 
System.out.println("Enter The Triangle Base"); 
base=s.nextInt(); 
System.out.println("Enter The Triangle height"); 
height=s.nextInt(); 
System.out.println("Enter The Triangle hypotenuse"); 
hypotenuse=s.nextInt(); 

System.out.println("Perimeter = " + g.getperimeter(constant,pi,radius)); 
System.out.println("Perimeter = " + g.getperimeter(sconstant,length)); 
System.out.println("Perimeter = " + g.getperimeter(rconstant,rlength,widith)); 
System.out.println("Perimeter = " + g.getperimeter(base,height,hypotenuse)); 
+0

Ты шутишь, да? double pi = 22/7? В самом деле? Когда доступен Math.PI? И 22/7 = 3 в целочисленной арифметике. – duffymo

+0

Даже не исправлял это. Это цитируется из вопроса.Но да, вы правы, это уродливые расчеты. – alamatula

0

Вы еще не знакомы с Java, кажется, следовательно, начать помощь:

  • Основной метод является статическим, который выполняется первым.

  • Вы используете перегруженные методы getperimeter, где вы можете легко смешивать int и double. Возможно, выберите уникальное имя. Соглашение Java - использовать забавный случай верблюда: getPerimeter.

    import java.util.*; 
    
    public class Perimeter { 
    
    public static void main(String args[]) { 
        new Perimeter().execute(); 
    } 
    
    public double getperimeter(int constant, double pi, double radius) { 
        return (constant * pi * radius); 
    } 
    
    public double getperimeter(int sconstant, double length) { 
        return (sconstant * length); 
    } 
    
    public double getperimeterRLenghtWidith(int rconstant, double rlength, double widith) { 
        return (rconstant * (rlength + widith)); 
    } 
    
    public double getperimeter(double base, double height, double hypotenuse) { 
        return (base + height + hypotenuse); 
    } 
    
    private void execute() { 
        final double pi = Math.PI; //22/7; 
        final int constant = 2; 
        double radius; 
    
        final int sconstant = 4; 
        double length; 
    
        final int rconstant = 2; 
        double rlength; 
        double widith; 
    
        double base; 
        double height; 
        double hypotenuse; 
    
        Scanner s = new Scanner(System.in); 
        System.out.println("Enter The Radius"); 
        radius = s.nextDouble(); 
        System.out.println("Enter The Square Length"); 
        length = s.nextInt(); 
        System.out.println("Enter The Rectangle Lenght"); 
        rlength = s.nextInt(); 
        System.out.println("Ener The Rectangle widith"); 
        widith = s.nextInt(); 
        System.out.println("Enter The Triangle Base"); 
        base = s.nextInt(); 
        System.out.println("Enter The Triangle height"); 
        height = s.nextInt(); 
        System.out.println("Enter The Triangle hypotenuse"); 
        hypotenuse = s.nextInt(); 
    
        System.out.println("Perimeter = " + getperimeter(constant, pi, radius)); 
        System.out.println("Perimeter = " + getperimeter(sconstant, length)); 
        System.out.println("Perimeter = " + getperimeterRLenghtWidith(rconstant, rlength, widith)); 
        System.out.println("Perimeter = " + getperimeter(base, height, hypotenuse)); 
    
    } 
    } 
    
5

Это "классическая" главная проблема, ученые любят. (Другие включают животное или транспортные средства.)

Старта с интерфейсом Shape:

public interface Shape { 
    double getPerimeter(); 
} 

Тогда есть подклассы реализовать, каждый по-своему:

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

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

    public double getPerimeter() { return 2.0*(this.width + this.height); } 
} 


public class Circle implements Shape { 
    private double radius; 

    public Circle(double r) { 
     this.radius = r; 
    } 

    public double getPerimeter() { return 2.0*Math.PI*this.radius; } 
} 

Вы сможете делать такие вещи:

List<Shape> shapes = new ArrayList<Shape>(); 
shapes.add(new Rectangle(1.0, 2.0)); 
shapes.add(new Circle(10.0)); 
for (Shape shape : shapes) { 
    System.out.println(shape.getPerimeter()); // every Shape will do it their own way 
} 

Добавить новую реализацию Shape и ваше происхождение Все еще работает. Это суть полиморфизма и динамической привязки.

+0

Конечно, спасибо за исправление. – duffymo

Смежные вопросы