1

これは私のAndroidアプリのコードですが、完全ではありません

package com.example;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Toast;

public class MainActivity extends Activity {
    private EditText text;
    private EditText text2;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text = (EditText) findViewById(R.id.editText1);
        text2=(EditText)findViewById(R.id.result);


    }

    // This method is called at button click because we assigned the name to the
    // "OnClick property" of the button
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.button1:
                RadioButton celsiusButton = (RadioButton) findViewById(R.id.radio0);
                RadioButton fahrenheitButton = (RadioButton) findViewById(R.id.radio1);
                RadioButton KelvinButton=(RadioButton) findViewById(R.id.radio2);
                if (text.getText().length() == 0) {
                    Toast.makeText(this, "Please enter a valid number",
                            Toast.LENGTH_LONG).show();
                    return;
                }

                float inputValue = Float.parseFloat(text.getText().toString());
                if (celsiusButton.isChecked()) {
                    text2.setText(String
                            .valueOf(convertFahrenheitToCelsius(inputValue)));
                    celsiusButton.setChecked(true);
                } else {
                    text2.setText(String
                            .valueOf(convertCelsiusToFahrenheit(inputValue)));
                    fahrenheitButton.setChecked(false);
                    celsiusButton.setChecked(true);
                    if(KelvinButton.isChecked())
                    {
                        text2.setText(String.valueOf(convertoKelvin(inputValue)));
                    }
                }
                break;
            case R.id.button2:
                RadioButton celsiusButton = (RadioButton) findViewById(R.id.radio0);
                RadioButton fahrenheitButton = (RadioButton) findViewById(R.id.radio1);
                RadioButton KelvinButton=(RadioButton) findViewById(R.id.radio2);
                float inputValue = Float.parseFloat(text.getText().toString());

                if (text.getText().length() == 0) {
                    Toast.makeText(this, "Please enter a valid number",
                            Toast.LENGTH_LONG).show();
                    return;
                }

                if (fahrenheitButton.isChecked()) {
                    text2.setText(String
                            .valueOf(convertFahrenheitToCelsius(inputValue)));
                    celsiusButton.setChecked(true);
                } else {
                    text2.setText(String
                            .valueOf(convertCelsiusToFahrenheit(inputValue)));
                    fahrenheitButton.setChecked(true);
                    if(KelvinButton.isChecked())
                    {
                        text2.setText(String.valueOf(convertoKelvin(inputValue)));
                    }
                }
                break;
            case R.id.button3:
                RadioButton celsiusButton = (RadioButton) findViewById(R.id.radio0);
                RadioButton fahrenheitButton = (RadioButton) findViewById(R.id.radio1);
                RadioButton KelvinButton=(RadioButton) findViewById(R.id.radio2);
                float inputValue = Float.parseFloat(text.getText().toString());
                if (text.getText().length() == 0) {
                    Toast.makeText(this, "Please enter a valid number",
                            Toast.LENGTH_LONG).show();
                    return;
                }

                if (KelvinButton.isChecked()) {
                    text2.setText(String
                            .valueOf(convertFahrenheitToCelsius(inputValue)));
                    celsiusButton.setChecked(true);
                } else {
                    text2.setText(String
                            .valueOf(convertCelsiusToFahrenheit(inputValue)));
                    fahrenheitButton.setChecked(false);
                    celsiusButton.setChecked(true);
                    if(KelvinButton.isChecked())
                    {
                        text2.setText(String.valueOf(convertoKelvin(inputValue)));
                    }
                }
                break;

        }
    }

    // Converts to celsius
    private float convertFahrenheitToCelsius(float fahrenheit) {
        return ((fahrenheit - 32) * 5 / 9);
    }

    // Converts to fahrenheit
    private float convertCelsiusToFahrenheit(float celsius) {
        return ((celsius * 9) / 5) + 32;
    }

    private float convertoKelvin(float celsius)
    {
        return ((celsius+273)) ;
    }


}

ご覧のとおり、非常に多くの場合、毎回変数を定義しています。これを行わないと、「値が初期化されていない可能性があります。何が間違っているのか」というエラーが表示されます。

あなたが疑問に思っていたなら、私のコードは完全ではありません。私はこのエラーに夢中になり、これが修正されたら続行します

4

2 に答える 2

2

私があなたの質問を正しく理解していれば celsiusButton、 、fahrenheitButtonKelvinButton変数に 1 つのケースだけで値を割り当てると、エラーが発生します。

これが発生する理由は、オブジェクトの初期化のスコープです。以下は、何が起こっているかを示すサンプルです。

public void example() {
    String str;
    switch (1) {
    case 1:
        str = "test";// If I initalize here then there is problem since
                        // scope is limited to only this case
        str.toString();
        break;

    default:
        str.toString();// Compilation error here.
        break;
    }
}

public void example() {
    String str = "test";
    switch (1) {
    case 1:
        str.toString();
        break;

    default:
        str.toString();// No error because scope of initialisation is whole
                        // method
        break;
    }
}

そのため、前に変数を定義する必要がありますswitch (view.getId()) {

結果の宣言は以下のようになります

public void onClick(View view) {
RadioButton celsiusButton = (RadioButton) findViewById(R.id.radio0);
RadioButton fahrenheitButton = (RadioButton) findViewById(R.id.radio1);
RadioButton KelvinButton=(RadioButton) findViewById(R.id.radio2);
switch (view.getId()) {
    case R.id.button1:
于 2012-09-24T05:14:47.383 に答える
0

私が正しく理解している場合、IntelliJ は、使用している変数が適切に初期化されていない可能性があることを警告しています。一見すると、onCreate()is の前に呼び出されない場合onClick()textandtext2は初期化されません。これは、IntelliJ が混乱している理由である可能性があります。

于 2012-09-24T04:49:48.150 に答える