2013-04-07 6 views
2

나는 기술을 가진 학생들을 돕는 많은 가정교사를위한 급여를 계산하는 데 도움이되는 배열을 기반으로 프로그램을 만들고 있습니다. 이 프로그램은 교사의 수를 취한 다음 교사 이름으로 진행하고 교사가 얼마나 많은 학생들에게 도움을 주 었는지 물어보고 교사가 어느 정도의 수준 (BS, MS, PhD)을 가지고 있는지 질문합니다. 교사는 그들이 가지고있는 학위 수준에 따라 다른 금액의 돈을 지불하게됩니다. 따라서 첫 번째 교사 (Bill)가 5 명의 학생을 가르치고 PhD (학생 당 20 달러)를받은 경우 다른 교사 ($ 15.00, 학생 당 15.00 달러, BS = 학생 당 9.50).다른 배열의 특정 조건을 기반으로 배열에 특정 값을 곱한 다음 새 배열에 값을 저장 하시겠습니까?

제 문제는 모든 데이터를 입력 할 때 지불 열에 대해 0.0을 받고 총 급여에 대해 0.0을 얻는 것입니다. 제가하고자하는 것은 학위 배열에 입력 된 학위를 기반으로합니다. 학생 한 명당 교재 수 (일명 학생 수)를 곱한 다음 그 수를 stipend라는 새로운 배열에 저장합니다. 나는 다시 정렬하고, 다시 이름을 정하고, 내가 생각해 볼 수있는 모든 것에 대해 끝내기 위해 봉급을 받지만 옵션이 없어지고 매우 좌절하게된다. 그래서 누구든지 나를 도울 수 있다면 크게 감사하겠습니다.

 for(int pay=0; pay<numOfTutors; pay++) { 
      if (degree[pay] == "BS") { 
       stipend[pay] = taught[pay] * 9.50; 
      } 
      else if (degree[pay] == "MS") { 
       stipend[pay] = taught[pay] * 15.00; 
      } 
      else if (degree[pay] == "PhD") { 
       stipend[pay] = taught[pay] * 20.00; 
      } 
      sum+=stipend[pay]; 
     }  
+1

코드 디버깅을 시도 했습니까? 한 줄씩 단계별로 진행하고 있습니까? –

+0

예, 단계별로 단계별로 재 배열하고 이름을 다시 지정하고, 물건을 가져 왔으며, 물건을 넣고, 여전히 소용 없습니다. 내 급여 열은 계속 0.0입니다. –

+1

코드 샘플을 줄일 수 있도록 SO를 제공하는 것이 좋습니다. 나는. 모든 불필요한 코드를 제거하십시오 (예 : 입력/출력을 하드 코딩 된 더미 데이터로 바꾸십시오). 코드를 IDE에 복사/붙여 넣기하고, 상용구를 추가하고, 문제가 즉시 나타납니다. – millimoose

답변

2

.equals() 메서드 대신 == 연산자를 사용하여 문자열 동일성을 확인하는 것이 문제입니다. 당신이 쓸 때 : 당신은 당신이 대소 문자를 구분 일치를 원한다면, 당신은

여기
degree[pay].equalsIgnoreCase("some_string") 

가 무슨 일이야이야 사용할 수 있습니다,

degree[pay] == "some_string" 

degree[pay].equals("some_string") 

폼의 라인을 변경하거나한다 degree[pay] = "some_string"의 경우 참조 동일성을 확인합니다. 이는 수행중인 작업에 대해 작동하지 않습니다. 왜냐하면 상수 문자열과 생성 된 문자열에는 동일한 참조가 없습니다. .equals() 메서드는 같은 값인을 확인합니다.

+0

주셔서 감사합니다. 나는 그것이 너무 단순한 것으로 믿을 수 없다. 이전 프로젝트에서 내 (학위 (pay) = "some_string")를 기점으로 (.equals)에 대해 완전히 잊었다. 다시 한번 고마워요. –

+0

당신을 환영합니다! 귀하의 질문에 답하면 답을 표시하십시오 (선호하는 것이 좋습니다 :)! – feralin

+0

감사합니다. 다시 한 번 감사드립니다. –

2

String을 비교하려면 String#equals을 사용하십시오. == 연산자는 Object 참조를 비교하는 데 사용됩니다. 비교되는 2 개의 값에 대한 참조가 같지 않기 때문에 배열 stipend에 대한 지불 조정은 수행되지 않습니다. "MS"와 "박사"문자열 검사에 대한 유사

if (degree[pay].equals("BS")) { 

if (degree[pay] == "BS") { 

교체합니다.

+0

그래, 그냥 다른 포스터에서 발견, 고맙습니다, 많이 주셔서 감사합니다! –

관련 문제