2010-07-18 3 views
0

나는 주차장 신청을해야하는 운동을하고 있습니다. 목표는 차량이 주차 된 시간을 선택하기위한 numericUpDown 컨트롤이있는 폼을 생성합니다. 차량이 자동차인지 트럭인지 표시하는 옵션 버튼을 추가하십시오. 각 상자 및 버튼에 명확하게 레이블을 지정하십시오. 지불 할 금액을 표시하는 레이블 또는 텍스트 상자를 추가하십시오.텍스트 상자의 숫자가 미리 정의 된 값보다 큰지 확인하려면 어떻게합니까?

또한 일부 제한을 설정해야합니다. 자동차는 24 시간 동안 38 달러 이상을 지불해서는 안되며, 트럭은 24 시간 동안 44.50 달러를 넘지 않아야합니다.

유일한 문제는 내가 이러한 제한을 설정할 수 없다는 것입니다. 그것은 오류를 준다 : 할당되지 않은 지역 변수 'result'의 사용.

주석 처리 된 /// 코드를 확인하십시오.

도움을 주시면 감사하겠습니다. 학업 프로젝트가 아닙니다. 저는 혼자 C#을 배우고 연습을하고 있습니다.

 private void calculate_Click(object sender, EventArgs e) 
    { 
     double carhours = 3; 
     double truckhours = 3.50; 
     double carFirsthour = 5; 
     double truckFirsthour = 6; 
     int hrs = (int)numericUpDown.Value; 
     double result; 
     int maxCarFee = 38; 


     if (numericUpDown.Value < 1) 
     { 
      MessageBox.Show("NO WAY"); 
      return; 
     } 

     if (carButton.Checked == true && (numericUpDown.Value == 1)) 
     { 
      result = (hrs * carFirsthour); 
      fee.Text = "$" + result; 
     } 

     if (carButton.Checked == true && (numericUpDown.Value > 1)) 
     { 
      result = ((hrs - 1) * carhours + carFirsthour); 
      fee.Text = "$" + result; 
     } 

     if (truckButton.Checked == true && (numericUpDown.Value == 1)) 
     { 
      result = (hrs * truckFirsthour); 
      fee.Text = "$" + result; 
     } 

     if (truckButton.Checked == true && (numericUpDown.Value > 1)) 
     { 
      result = ((hrs - 1) * truckhours + truckFirsthour); 
      fee.Text = "$" + result; 
     } 

     /// limits 

     ///if (carButton.Checked == true && (numericUpDown.Value < 24) && (result > maxCarFee)) 
     ///{ 
     /// fee.Text = "$" + maxCarFee; 
     ///} 
    } 
+0

오류를 추가하면 도움이 될 것입니다. –

+0

예, 죄송합니다. – Manolis

답변

1

시도 뭔가 : 자동차/트럭이 24 시간 이상 (또는 48 시간 이상)에 대한 유지하면

private void calculate_Click(object sender, EventArgs e) { 
    double carhours = 3.0; 
    double truckhours = 3.5; 
    double carFirsthour = 5.0; 
    double truckFirsthour = 6.0; 
    double maxCarFee = 38.0; 
    double maxTruckFee = 44.5; 

    int hrs = (int)numericUpDown.Value; 
    double result; 

    if (hrs < 1) { 
     MessageBox.Show("NO WAY"); 
     return; 
    } 

    if (carButton.Checked) { 
     result = (hrs-1) * carhours + carFirsthour; 
     if (result > maxCarFee) { 
      result = maxCarFee; 
     } 
    } 
    else { 
     result = (hrs-1) * truckhours + truckFirsthour; 
     if (result > maxTruckFee) { 
      result = maxTruckFee; 
     } 
    } 

    fee.Text = "$" + result; 
} 

그러나, 당신이 정말로 어떻게해야하는지는 명확하지 않습니다. 이 같은 더 일관성있는 결과를 얻을 수 있습니다 당신이 사용할 수 있도록

private void calculate_Click(object sender, EventArgs e) { 
    double hourlyFee = 3.0; 
    double firstHourFee = 5.0; 
    double max24hrFee = 38.0; 

    if (!carButton.Checked) { 
     hourlyFee = 3.5; 
     firstHourFee = 6.0; 
     max24hrFee = 44.5; 
    } 

    int hrs = (int)numericUpDown.Value; 
    if (hrs < 1) { 
     MessageBox.Show("NO WAY"); 
     return; 
    } 

    double result = 0.0; 
    if (hrs >= 24) { 
     result = (hrs/24) * max24hrFee; 
     hrs = hrs % 24; 
    } 

    if (hrs > 0) { 
     result = result + firstHourFee + ((hrs-1) * hourlyFee); 
    } 

    fee.Text = "$" + result; 
} 
+0

"== true"를 제외한 좋은 정리는 코드 가독성에 해를 끼치 지 않으면 제거 할 수 있습니다. 나는 천천히 타이핑하므로 모든 캐릭터가 카운트한다 : P – SirDemon

1

당신이

을이 int32하는 numericUpDown.Value 변환해야하거나 당신이 한 becuase이 :

int hrs = (int)numericUpDown.Value; 

그냥 시간 대신 numericUpDown을 사용할 수 있습니다 여기에

코드입니다 . if 문에있는 값

+0

네, 내가 왜 그리워하는지 모르겠어요! 감사. 그러나 문제는 '결과'변수에 있습니다. 코드가 바로 지금 오류입니다. 할당되지 않은 지역 변수 'result'사용 – Manolis

0

numericUpDown.Value가 24보다 작 으면, 더 큰 것을 의미한다고 생각합니다 (>) ?! 할당되지 않은 지역 변수 '결과'

사용하면 변수를 초기화하지 않는 것을 의미한다. 당신은 if 구조로 가기 전에 다음과 같이해야만한다.

result = 0 

. 이 같은

-1
int hrs = (int)numericUpDown.Value; 

당신은 당신의 경우 조건에서 시간에 가치를 얻을.

if (carButton.Checked == true && (numericUpDown.Value == 1)) 

다음과 같이 작성하십시오. == true

if (carButton.Checked && (numericUpDown.Value == 1)) 
0

문제의 필요 조건 (있는 경우) 문 중 어느 것도 그렇게 result 값이 할당되지 않습니다 실행되지 않는다는 점이다. 그 선언에 result을 할당하면 double result = 0D;- 코드가 실행되어 조건부 논리를 디버깅 할 수 있습니다.

관련 문제