これは私が取り組んでいる課題です:"サークル"クラスとJavaのコンストラクタに関する問題?
"作業する図形を選択するためのグラフィカルユーザインタフェースを持つJavaプロジェクトを作成してください:Square、Rectangle、Circle、Triangle
は、彼らは形状のために寸法を入力し、図形の面積を計算するために選択することができます。
あなたは、基本クラス「形」を使用して、するために形状を継承する4つの異なるクラスを持っていますAreaの計算は、適切なクラスのarea()メソッドを使用するものとします。
私の考えは、同じグループのラジオボタンでユーザーがシェイプを選択し、それぞれのテキストフィールドに寸法(高さと幅)を入力させることでした。彼らはそれらの両方を行った後、ボタンを押すと形状の面積が計算されます。
私は基本的なShapeクラスと4つの継承クラスを作成しました。私は可能な限りGUIでメインクラスに「接続」しましたが、サークルエリアを計算しようとすると、私はCircle領域をwidthフィールドで計算する(数式には1次元のみが必要なため)場合、プログラムはユーザーに高さと幅の両方のフィールドに数値を入力させたいので例外が発生します。私はこれに対処するために複数のコンストラクタを設定しましたが、明らかに何か間違ったことをしました。他のすべての図形はうまく計算されています。ここで
は、ボタンを押したときのための私の主な(GUI)のコードである:ここでは
private void buttonAreaActionPerformed(java.awt.event.ActionEvent evt) {
int height = Integer.parseInt(tfHeight.getText());
int width = Integer.parseInt(tfWidth.getText());
try {
Square mySquare = new Square(height,width);
Circle myCircle = new Circle(width);
Triangle myTriangle = new Triangle(height,width);
Rectangle myRectangle = new Rectangle(height,width);
double result = 0;
if (rbSquare.isSelected()) {
result = mySquare.area();
}//end of if block
else if (rbCircle.isSelected()){
result = myCircle.area();
}
else if (rbTriangle.isSelected()){
result = myTriangle.area();
}
else if (rbRectangle.isSelected()){
result = myRectangle.area();
}//end of else block
JOptionPane.showMessageDialog(this, "Area is " + result);
}//end of try block
catch (NumberFormatException ex) {
//Display new window with text upon catching exception
JOptionPane.showMessageDialog(this, "Please enter the proper dimensions");
}//end of catch block
}
は、基本Shapeクラスのコードです:ここで
public class Shape extends mainWindow {
//create properties for class
int width;
int height;
//default constructor to override method
public Shape(){
//"this" uses properties above
width = 0;
height = 0;
}//end of constructor
//create the constructor (same as the class name) and pass it arguments
public Shape(int height, int width){
//"this" uses properties above
this.height = height;
this.width = width;
}//end of constructor
public Shape(int width) {
this.width = width;
}
はCircleクラスのコードです:
public class Circle extends Shape {
//constructor
Circle(int width){
this.width = width;
}
public double area(){
return Math.PI*(width*width);
}
}
ユーザーがサークルオプションを選択してから幅の次元を入力したときに再度表示するには、エラー。彼らは高さと幅のボックスに次元を入力する必要があります(これは実際には高さの値を取って計算に使用しませんが、高さのテキストフィールドを入力する必要があります)
誰でも助けることができます私はこれを理解するか、どこに間違っていたか教えてください。ここ
例外スタックトレースである:スレッド "AWT-EventQueueの-0" java.lang.NumberFormatExceptionで
例外: "java.lang.NumberFormatException.forInputStringの" (NumberFormatException.java:入力文字列について65)bism3800.mainWindow.buttonAreaActionPerformedでjava.lang.Integer.parseInt(Integer.java:615) でjava.lang.Integer.parseInt(Integer.java:592) (mainWindow.java:150) ででbism3800.mainWindow.access $ 000(mainWindow.java:14) at bism3800.mainWindow $ 1.actionPerformed(mainWindow.java:71) at javax.swing.AbstractButton.fireAc tionPerformed(AbstractButton.java:2022)javax.swing.AbstractButton $ Handler.actionPerformed(AbstractButton.java:2348)javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)で javax.swing.DefaultButtonModelで で 。 BasicButtonListener.basic.BasicButtonListener.mouseReleased(BasicButtonListener)で、setPressed(DefaultButtonModel.java:259) を取得します。java:252) at java.awt.Component.processMouseEvent(Component.java:6533) (javax.swing.JComponent.processMouseEvent(JComponent.java:3324)) at java.awt.Component.processEvent(Component.java: 6298) at java.awt.Container.processEvent(Container.java:2236) at java.awt.Component.dispatchEventImpl(Component.java:4889) at java.awt.Container.dispatchEventImpl(Container.java:2294) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) at java.awt.Container.dispatchEventImpl(Container.java:2280) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) at java.awt.EventQueue.access $ 500(EventQueue.java:97) at java.awt.EventQueue $ 3.run(EventQueue.java:709) at java.awt.EventQueue $ 3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(ネイティブメソッド) at java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java。 security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) java.awt.EventQueue $ 4.run(EventQueue.java:731) at java.awt.EventQueue $ 4.run(EventQueue.java:729) at java.security.AccessController.doPrivileged(ネイティブメソッド) at java。 java.awt.EventDispatchThread.pumpOneEventForFiltersでjava.awt.EventQueue.dispatchEvent(EventQueue.java:728) でsecurity.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) (EventDispatchThread.java:201)は、Javaで 。 java.awt.EventDispatchThread.pumpEventsでawt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) で(EventDispatchThread.java:101)するjava.awtで 。 EventDispatchThread.pumpEvents(EventD ispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
完全な例外スタックトレースメッセージを送信してください。これはあなたの問題を解決するための鍵であり、いつも質問で投稿する必要があります。 –
サブクラスはスーパーのコンストラクタを独自のコンストラクタ内で呼び出す必要があります。 –
あなたの問題はちょうどあなたが高さのフィールドにparseintをやろうとしているようです。 – ControlAltDel