【问题标题】:How can I create a class that will compute the area and circumference of a circle and send the results using eclipse?如何创建一个类来计算圆的面积和周长并使用 eclipse 发送结果?
【发布时间】:2013-10-18 22:21:00
【问题描述】:

我创建了一个应用程序来计算圆的面积和周长,然后将结果发送给用户。唯一的问题是我必须将计算放在与 MainActivity.java 不同的类中。我目前在 MainActivity.java 的底部有计算,这不是我想要的。这是我目前所拥有的:

package com.areacircumferencecircle;

import android.os.Bundle;
import android.app.Activity;
import android.widget.*;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;

public class MainActivity extends Activity implements OnClickListener {

private Button btn;
private EditText edit;
private TextView area;
private TextView crf;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn = (Button)findViewById(R.id.button1);
    edit = (EditText)findViewById(R.id.editText1);
    area = (TextView)findViewById(R.id.textArea);
    crf = (TextView)findViewById(R.id.textCircumference);
    btn.setOnClickListener(this);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public void onClick(View v) {
    if(btn == v){
        double r = Double.parseDouble(edit.getText().toString());
        String a = Double.toString(3.141592 * (r * r));
        String c = Double.toString(2 * 3.141592 *  r);
        crf.setText("Circumference: " + c);
        area.setText("Area: " + a);
    }

  }

}

非常感谢任何帮助!

【问题讨论】:

    标签: java eclipse


    【解决方案1】:

    创建一个仅用于计算结果的类:

    class Computations{
        public double area(double r){
            return 3.141592 * r * r;
        }
        public double circumference(double r){
            return 2 * 3.141592 *  r;
        }
    }
    

    然后,在onClick(View v){...} 中使用它。如果您希望该方法经常被调用,您可以在该方法之外实例化c 并将其保留为类变量。

    public void onClick(View v) {
        if(btn == v){
            double r = Double.parseDouble(edit.getText().toString());
            Computations c = new Computations();
            crf.setText("Circumference: " + c.circumference(r));
            area.setText("Area: " + c.area(r));
        }
      }
    

    仅此而已!

    【讨论】:

    • 好吧,我确实做到了,只是在“c.circumference(r)”中的“r”下出现错误,指出“r 无法解析为变量”。我尝试声明 r 但只收到更多错误。
    • double r = Double.parseDouble(edit.getText().toString()); 在调用Computations 类之前仍会在您的活动中完成
    • 是的,我确实做到了,但在“Computations c = new Computations();”下出现错误弹出“无法访问 Circle 类型的封闭实例。必须使用 Circle 类型的封闭实例限定分配(例如 x.new A(),其中 x 是 Circle 的实例)。”
    • 您是在单独的独立文件中创建 Computations 类,还是在现有类中创建它?您可能希望将其提取到 Computations.java,否则您必须实例化一个内部类,如下所述:stackoverflow.com/questions/4070716/instantiating-inner-class。您可能还想阅读 java 类介绍 docs.oracle.com/javase/tutorial/java/javaOO/classes.html
    • @BrianPatino Grove 是对的 - 将 Computations 放在项目的另一个文件中,然后将其导入 MainActivity
    【解决方案2】:

    创建一个名为 Circle 的类

    有一个私有的 double 来存储半径

    让构造函数接受双精度

    实现以下方法:

    public String area() // or areaStr(), if you also want public double area(), etc
    
    public String circumference()
    

    在 MainActivity 中,创建一个 Circle,检索它的面积和周长,等等。

    【讨论】:

    • 好的,我创建了一个名为 Circle 的类和一个私有双精度来存储半径,但是我如何让构造函数接受双精度呢?
    • 从某种角度来说,构造函数很像一个普通的方法,所以它可以接受参数:public Circle(double r){....}
    猜你喜欢
    • 1970-01-01
    • 2022-12-17
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 2018-04-07
    相关资源
    最近更新 更多