-1

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));
4

4 に答える 4

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実装を追加しても、元のコードは引き続き機能します。これが、ポリモーフィズムと動的バインディングの本質です。

于 2013-03-15T12:22:04.640 に答える
4

1 つのクラス内で同じシグネチャを持つ 2 つのメソッドを定義しています。これはエラーです。あなたの方法:

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

また、メイン メソッドは static として宣言する必要があります

于 2013-03-15T12:08:38.363 に答える
0

こんにちは、別のファイルに Perimeter クラスが必要です。クラス Perimeter を閉じている括弧が欠落しています。また、Xavier が述べたように、同じ署名を持つ 2 つのメソッドがあります。また、Scanner から Perimeter インスタンス変数に値を読み取り、初期化されていない値を Perimeter メソッドに渡します。したがって、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));
于 2013-03-15T12:15:47.450 に答える
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));
    
    }
    }
    
于 2013-03-15T12:18:38.283 に答える