2011-01-25 4 views
0

처리를 프레임 워크로 사용하여 Java로 계산기를 만들고 있습니다. 나중에 입력 할 수 있도록 숫자 입력을 저장하는 클래스를 작성하고 있습니다. Cannot find anything named "number"[Java 오류] "number"라는 것을 찾을 수 없습니다.

나는 종류의 나는이 작업을 얻으려면 어떻게해야 해요 무엇으로 붙어있어 : 내가 처리에 스케치를 실행하면 그것이 나에게 말한다 오류를 제공

//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); 
} 

. 모든 조언을 부탁드립니다.

+0

이미 답변되었지만 코드에 큰 결함이 있습니다. 메서드가'constructor'으로 잘못 언급되었습니다. 메소드가 공개적으로 표시되지 않습니다. 사용자가 '기본'액세스 가능성을 갖기를 바랍니다. 'mem1'과'mem2' 메쏘드에서 클래스/로컬 변수에 할당하기 위해 인수 _of_를 사용하는 대신에 ** value _to_ argument를 할당합니다. ** 마지막으로 모든 사람들이 말했듯이, '액세스 가능하고 여러 메소드에 의해 수정 가능하려면 클래스 변수로 만드십시오. – Nishant

+0

모든 의견과 비판을 읽으려는 시도는 자바를 사용하는 두 번째 프로젝트 일뿐입니다. 마음에 계속 나는 또한 프레임 워크로 처리를 사용하고 있습니다. 모든 사람의 조언을 통해 최선을 다해 배웁니다. 도와 주셔서 감사합니다. – nnash

답변

2

여기에는 수많은 구문 문제가 있습니다. 너는 단 한가지 문제 만 가지고 있지 않다. 당신이 물었던 것을 고치는 것만으로도 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()); 
    } 
} 

정말 기본으로 돌아가서 초보자 안내서로 시작해야합니다.

+0

OP는 해결책보다 기본 사항을 알아야합니다. 이것이 명확성을 주길 바라지 만, 그가 이것을 복사하여 붙여 넣으면. 좋을 것 같지 않아. – Nishant

+0

동의합니다. 그러나 1 개의 오류 만 알려주면 10 분 후에 다음 오류로 복귀합니다. 나는 그에게 전적으로 일하는 것을 줄 것이고, 그걸 가지고 놀 수 있다고 생각합니다. 다행히 그는 내가 한 모든 것을 이해할 수있는 시간이 걸릴 것입니다. – rfeak

+0

나는 Nishant가 무엇을 얻고 있는지 이해하고 있습니다. rfreak가 해결책으로 제안한 코드 샘플을 작성하는 데 걸린 시간을 고맙게 생각합니다. 나는 내일 내 선생님과 함께 앉아 코드에서 진행되는 모든 일을 이해할 수 있도록 할 것입니다. – nnash

0

먼저 processStatus 함수를 memStorage 클래스에 넣습니다. 아마도 'number'변수를 storedNum1 및 storedNum2와 함께 인스턴스 변수로 변환하려고 할 것입니다. 셋째, 클래스 내부에 main() 함수를 생성 한 다음 memStorage 클래스의 인스턴스를 만들고 processNumber() 함수를 호출합니다. 네 번째로 생성자는 클래스 이름과 완전히 동일한 이름이어야합니다. 'memStorage'로 변경하십시오.

또한 mem1 및 mem2 함수는 인스턴스 변수에 아무 것도 저장하지 않습니다. 함수가 종료되면 'num1'및 'num2'변수가 사라집니다. 'num1'및 'num2'를 storedNum1 또는 storedNum2로 바꿉니다.

개체 지향 패러다임 개념을 연구하고 이해해야합니다.

0

숫자는 로컬 변수이며 메서드 블록 외부에서 볼 수없는 것으로 보입니다.

0

당신은

num1 = number; 

num2 = number; 

당신은 전에 수없는 선언이없는 것을 확인할 수 있습니다 (당신이 관련 코드를 게시하지 않는 한?)

에서 가까이 보면

도 마찬가지라고 생각합니다.

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

코드는 number 값을 함수 종료시 소멸 될 로컬 변수 num1에 복사합니다. 아무 것도 저장되지 않습니다.