-1

I'm getting cant cannot be resolved to a variable,i know what it's for but i don't know how to fix it.Do i have to declare it somewhere else ? Where ?

I have this :

public void calculeaza() {

    totaltest = 0;
    String[] cant = new String[allcant.size()];

    for (int j = 0; j < allcant.size(); j++) {

        cant[j] = allcant.get(j).getText().toString();
        if (cant[j].matches("")) {
            Toast.makeText(this,
                    "Ati omis cantitatea de pe pozitia " + (j + 1),
                    Toast.LENGTH_SHORT).show();
            cant[j] = Float.toString(0);

        }

And this :

public void salveaza(){
    try {

        File myFile = new File("/sdcard/mysdfile.txt");
        myFile.createNewFile();
        FileOutputStream fOut = new FileOutputStream(myFile);
        OutputStreamWriter myOutWriter = 
                                new OutputStreamWriter(fOut);
        myOutWriter.append(cant[1]);
        myOutWriter.close();
        fOut.close();
        Toast.makeText(getBaseContext(),
                "Done writing SD 'mysdfile.txt'",
                Toast.LENGTH_SHORT).show();
    } catch (Exception e) {
        Toast.makeText(getBaseContext(), e.getMessage(),
                Toast.LENGTH_SHORT).show();
    }
}
4

3 に答える 3

3

で宣言cantしたためcalculeaza()、 では使用できませんsalveaza()。メソッド間で共有する場合は、インスタンス変数として外部で宣言する必要があります。

Java スコープの詳細については、Java プログラミング: 5 - 変数スコープを参照してください。

于 2013-06-11T21:27:15.210 に答える
1

String[] の代わりに ArrayList を使用し、それをクラス フィールドとして宣言します。

public class MyClass{

    private ArrayList<String> cant;  // <---- accessible by all methods in the class.

    public void calculeaza() {

        cant = new ArrayList<String>();

        for (int j = 0; j < allcant.size(); j++) {

              cant.add(allcant.get(j).getText().toString());

             if (cant.get(j).matches("")) {
                 Toast.makeText(this,
                      "Ati omis cantitatea de pe pozitia " + (j + 1),
                      Toast.LENGTH_SHORT).show();
                 cant.get(j) = Float.toString(0);

             }
        ....

     public void salveaza(){ 

        try {

            File myFile = new File("/sdcard/mysdfile.txt");
            myFile.createNewFile();
            FileOutputStream fOut = new FileOutputStream(myFile);
            OutputStreamWriter myOutWriter = 
                               new OutputStreamWriter(fOut);
            myOutWriter.append(cant[1]);
            myOutWriter.close();
            fOut.close();
            Toast.makeText(getBaseContext(),
                "Done writing SD 'mysdfile.txt'",
                Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            Toast.makeText(getBaseContext(), e.getMessage(),
                Toast.LENGTH_SHORT).show();
        } 
    }

 }

これを行うにはもっと良い方法がありますが、これであなたの質問に対処できます。クラス レベルで配列を初期化するよりもはるかに簡単なため、ArrayList を使用します。

于 2013-06-11T21:33:05.093 に答える
1

cant を呼び出す文字列の配列をString[] cant = new String[allcant.size()];別のメソッドで使用する場合、メソッド内で宣言することはできません。

メソッド内で変数を宣言すると、変数はローカル メソッドになります。つまり、そのメソッド内にのみ存在し、外部からは表示または使用できません。ここでの最良の選択は、インスタンス変数として宣言することです。

于 2013-06-11T21:33:47.343 に答える