0

フレームワークとして処理を使用して Java で計算機を作成しています。後で取得できるように、数値入力を格納するクラスを作成しています。

//store numbers in memory
class memStorage {
  float storedNum1, storedNum2;

  //constructor
  void Memory(float num1, float num2){
    storedNum1 = num1;
    storedNum2 = num2;
  }

  //Store numbers and call them when needed
  //Store the first number
  void mem1(float num1){
    num1 = number;
    println("number 1 has been stored");
  }

  //Store the second number
  void mem2(float num2){
    num2 = number;
    println("number 2 has been stored");
  }

}

void processNumber(char number){
  //Instantiate memory storage class and execute method
  memStorage storedNum1 = new memStorage();
  storedNum1.mem1();
  //print keypressed numbers
  println(storedNum1);
}

処理中にスケッチを実行すると、次のようなエラーが表示されます。 Cannot find anything named "number"

これを機能させるために何をすべきかについて、私はちょっと行き詰まっています。アドバイスをいただければ幸いです。

4

4 に答える 4

2

ここにはたくさんの構文の問題があります。問題は 1 つだけではなく、たくさんあります。あなたが尋ねたものを修正するだけで、さらに約5〜10につながります.

最初にインラインでコメントします。

//This should probably be MemStorage. In Java classes start with a capital letter.
//It should also probably be public.
class memStorage {  
  float storedNum1, storedNum2;

  //constructor
  //This isn't a constructor. This is a method. It would be a constructor if it matched the name 
  //of the class AND didn't return a type of "void"
  void Memory(float num1, float num2){
    storedNum1 = num1;
    storedNum2 = num2;
  }

  //Store numbers and call them when needed
  //Store the first number
  void mem1(float num1){
    num1 = number; // The value of number is undeclared. This is the syntax error you ran into.
    // Also note that you didn't store in storedNum1.
    println("number 1 has been stored");
  }

  //Store the second number
  void mem2(float num2){
    num2 = number; // The value of number is undeclared. This is the syntax error you ran into.
    // Also note that you didn't store in storedNum2.
    println("number 2 has been stored");
  }

}

// This method isn't within the body of any class. Methods always belong inside of a class.
// The way you write this method, it looks like it should be the main method of another class
// You are using to hand test the MemStorage class
void processNumber(char number){
  //Instantiate memory storage class and execute method
  memStorage storedNum1 = new memStorage();
  storedNum1.mem1();
  //print keypressed numbers
  println(storedNum1); //This method doesn't exist. You probably mean System.out.println()
  // Furthermore, you didn't override toString(), so it wouldn't print anything meaningful.
}

これをクリーンアップして、あなたの意図と思われるものを保持する方法を次に示します。

public class MemStorage {
    private float storedNum1;
    private float storedNum2;

    public MemStorage(float num1, float num2){
        this.storedNum1 = num1;
        this.storedNum2 = num2;
    }

    public void setNum1(float num1){
        this.storedNum1 = num1;
        System.out.println("Number 1 has been stored.");
    }

    public void setNum2(float num2){
        this.storedNum2 = num2;
        System.out.println("Number 2 has been stored.");
    }

    public float getNum1(){
        return this.storedNum1;
    }

    public float getNum2(){
        return this.storedNum2;
    }

    // Hand Test
    public static void main(String[] args){
        MemStorage memStorage = new MemStorage(0,0);
        memStorage.setNum1(1.23454f);
        System.out.println(memStorage.getNum1());
    }
}

基本に戻って、初心者向けのチュートリアルから始める必要があります。

于 2011-01-25T05:54:35.747 に答える
0

まず、memStorage クラス内に processNumber 関数を配置します。'number' 変数を、storedNum1 および storedNum2 とともにインスタンス変数として変換することをお勧めします。3 つ目は、クラス内に main() 関数を作成し、memStorage クラスのインスタンスを作成して、processNumber() 関数を呼び出します。そして 4 番目に、コンストラクターはクラス名とまったく同じ名前でなければなりません。「memStorage」に変更します。

また、 mem1 および mem2 関数は、インスタンス変数に何も格納しません。関数が終了すると、'num1' および 'num2' 変数は消えます。'num1' と 'num2' を storedNum1 または storedNum2 に置き換えます。

オブジェクト指向パラダイムの概念を学び、理解する必要があります。

于 2011-01-25T05:35:42.703 に答える
0

number はローカル変数であり、そのメソッド ブロックの外では見ることができないようです。

于 2011-01-25T05:36:15.020 に答える
0

もっと近くで見ると

 num1 = number;

 num2 = number;

前に number の宣言がないことがわかります (関連するコードを投稿していない場合を除きますか?)。

また、あなたは次のようなことをしたいと思います

private number = 0;       
void mem1(float num1){
   number = num1;
   println("number 1 has been stored in private field number");
}

あなたのコードは number の値をローカル変数 num1 にコピーします。これは関数の終了時に破棄されます: 何も保存されません。

于 2011-01-25T05:36:23.827 に答える