简体   繁体   中英

local variable has not been initialized?

For some reason, it tells me that the TextView variables fact1 and fact2 have not been initialized. I use them about 2/3 through the code, within the if else concerning sol1 and sol2. Please help! Thanks!

package boston.project;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class TheBostonProjectActivity extends Activity {

    public EditText aed, bed, ced;
    public TextView dtv, nstv, sol1tv, sol2tv, factortv;
    public int a, b, c, dis;
    public Button solve;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        solve = (Button) (findViewById(R.id.bsolve));
        solve.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                // Perform action on click

                aed = (EditText) (findViewById(R.id.etA));
                try {
                    a = Integer.parseInt(aed.getText().toString());
                } catch (NumberFormatException e) {
                    a = 0;
                }
                bed = (EditText) (findViewById(R.id.etB));
                try {
                    b = Integer.parseInt(bed.getText().toString());
                } catch (NumberFormatException e) {
                    b = 0;
                }
                ced = (EditText) (findViewById(R.id.etC));
                try {
                    c = Integer.parseInt(ced.getText().toString());
                } catch (NumberFormatException e) {
                    c = 0;
                }

                dtv = (TextView) findViewById(R.id.tvdis);
                dis = (b * b) - (4 * a * c);
                dtv.setText("Discriminant: " + dis);
                nstv = (TextView) findViewById(R.id.tvnumsol);
                sol1tv = (TextView) findViewById(R.id.tvsol1);
                sol2tv = (TextView) findViewById(R.id.tvsol2);
                if (dis > 0) {
                    double sol1, sol2;
                    TextView fact1, fact2;
                    sol1 = ((-b) + ((b * b) + (4 * a * c)) ^ (1 / 2)) / (2 * a);
                    sol2 = ((-b) + ((b * b) - (4 * a * c)) ^ (1 / 2)) / (2 * a);
                    sol1tv.setText("Solution 1: " + sol1);
                    sol2tv.setText("Solution 2: " + sol2);
                    nstv.setText("The equation will have 2 solutions.");
                    if (sol1 > 0) {
                        fact1.setText("(x-" + sol1 + ")");
                    } else {
                        double sol1pos;
                        sol1pos = Math.abs(sol1);
                        fact1.setText("(x+" + sol1pos + ")");
                    }
                    if (sol2 > 0) {
                        fact2.setText("(x+" + sol2 + ")");
                    } else {
                        double sol2pos;
                        sol2pos = Math.abs(sol2);
                        fact1.setText("(x+" + sol2pos + ")");
                    }
                    fact1 = (TextView) findViewById(R.id.tvfact1);
                    fact2 = (TextView) findViewById(R.id.tvfact2);
                } else if (dis == 0) {
                    double sol1;
                    String fact;

                    sol1 = (-b) / (2 * a);
                    sol1tv.setText("Solution 1: " + sol1);
                    sol2tv.setText("No second solution");
                    nstv.setText("The equation will have 1 solution.");

                    if (sol1 > 0) {
                        fact = ("(x+" + sol1 + ")²");
                    } else {
                        fact = ("(x-" + sol1 + ")²");
                    }
                } else {
                    sol1tv.setText("No second solution");
                    sol2tv.setText("No second solution");
                    nstv.setText("The equation will have no solutions.");
                }
            }
        });
    }
}

You call setText() on them before you initialize them. Move the code that sets them up.

Initialize fact1 and fact2 when you declare them, like this:

TextView fact1 = (TextView) findViewById(R.id.tvfact1);
TextView fact2 = (TextView) findViewById(R.id.tvfact2);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM