Difference between revisions of "Radar Trap"

From CompSciWiki
Jump to: navigation, search
(Fixed errors in the step-by-step solution)
 
(6 intermediate revisions by 5 users not shown)
Line 3: Line 3:
 
|Problem=
 
|Problem=
 
This program simulates a radar trap for catching people who are driving over the  
 
This program simulates a radar trap for catching people who are driving over the  
speed limit. We will use JOptionPane.showInputDialog for input and JOptionPane.showMessageDialog for output, and all inputs will be integers. The user will first enter the speed limit for the road being monitored, and all subsequent inputs will be the speed of each vehicle that passes through the radar trap. An input of -1 ends the program.
+
speed limit. We will use JOptionPane.showInputDialog for input and JOptionPane.showMessageDialog for output. We will assume that all user input will be in the form of integers. The user will first enter the speed limit for the road being monitored, and all subsequent inputs will be the speed of each vehicle that passes through the radar trap. An input of -1 ends the program.
  
If a vehicle is travelling at or under the speed limit, print a message stating that the vehicle is
+
If a vehicle is traveling at or under the speed limit, print a message stating that the vehicle is
 
within the speed limit. Otherwise, if the vehicle is over the speed limit by 20 km/hr or less, the
 
within the speed limit. Otherwise, if the vehicle is over the speed limit by 20 km/hr or less, the
 
driver gets a $40 speeding ticket. If the vehicle is over by more than 20 km/hr and less than or equal to 40 km/hr, the driver gets an $80 ticket. If the vehicle is over by more than 40 km/hr,
 
driver gets a $40 speeding ticket. If the vehicle is over by more than 20 km/hr and less than or equal to 40 km/hr, the driver gets an $80 ticket. If the vehicle is over by more than 40 km/hr,
the driver gets a $120 ticket. If the vehicle is over the speed limit, print a message stating by how much the vehicle is over the speed limit, and the amount of the speeding ticket for that vehicle.
+
the driver gets a $120 ticket. In all cases where the vehicle is speeding, print a message stating by how much the vehicle is over the speed limit, and the applicable fine for that vehicle.
  
 
In addition, for every 10 cars that are caught, the police officer on duty receives a $20 bonus.
 
In addition, for every 10 cars that are caught, the police officer on duty receives a $20 bonus.
You will need to keep track of this total as well, separately from the speeding tickets.
+
You will need to keep track of this total separately from the speeding tickets.
  
 
Once the program has ended, it should print the total number of cars caught speeding,
 
Once the program has ended, it should print the total number of cars caught speeding,
the total amount of fines issued, and the total amount of the police officer's bonus.  
+
the sum total of all fines issued, and the total amount of the police officer's bonus.  
  
|SideSectionTitle=String Methods & Debugging
+
|SideSectionTitle=String Methods and Debugging
 
|SideSection=
 
|SideSection=
 
[[Image:Wiki_array02.jpg|center]]<BR>
 
[[Image:Wiki_array02.jpg|center]]<BR>
Line 22: Line 22:
 
|Solution=
 
|Solution=
 
1. First declare the necessary variables.
 
1. First declare the necessary variables.
<pre>
+
{{CodeBlock
 +
|Code=
 
//variable declarations
 
//variable declarations
 
int speedLimit;
 
int speedLimit;
Line 32: Line 33:
 
int vehicleCount = 0;
 
int vehicleCount = 0;
 
String input = "";
 
String input = "";
</pre>
+
}}
 
2. The first input dialog comes up asking for the speed limit of the road.<br>
 
2. The first input dialog comes up asking for the speed limit of the road.<br>
 
The input string must be parsed to an int.
 
The input string must be parsed to an int.
<pre>
+
{{CodeBlock
 +
|Code=
 
input = JOptionPane.showInputDialog("Enter the speed limit for the road.");
 
input = JOptionPane.showInputDialog("Enter the speed limit for the road.");
 
speedLimit = Integer.parseInt(input);
 
speedLimit = Integer.parseInt(input);
</pre>
+
}}
 
3. Now the main loop begins. The user is asked to enter the current vehicle's speed,
 
3. Now the main loop begins. The user is asked to enter the current vehicle's speed,
 
and the loop repeats as long as the user <br>does not enter -1. The input string must again
 
and the loop repeats as long as the user <br>does not enter -1. The input string must again
 
be parsed to an int.
 
be parsed to an int.
<pre>
+
{{CodeBlock
while (speed != 1)
+
|Code=
 +
while (speed != -1)
 
{
 
{
 
     input = JOptionPane.showInputDialog("Speed of current vehicle is");
 
     input = JOptionPane.showInputDialog("Speed of current vehicle is");
 
     speed = Integer.parseInt(input);
 
     speed = Integer.parseInt(input);
 
     amountOverLimit = speed - speedLimit;
 
     amountOverLimit = speed - speedLimit;
</pre>
+
}}
4. First check if the vehicle is within the speed limit. If it is, print a message confirming this.
+
4. Next, check if the vehicle is within the speed limit. If it is, print a message confirming this.
<pre>
+
{{CodeBlock
 +
|Code=
 
if(amountOverLimit <= 0)
 
if(amountOverLimit <= 0)
 
{
 
{
ticket = 0;
+
    ticket = 0;
JOptionPane.showMessageDialog("Vehicle is within the speed limit.");
+
    JOptionPane.showMessageDialog(null, "Vehicle is within the speed limit.");
 
}  
 
}  
</pre>
+
}}
 
5. If the vehicle is speeding, check by how much it is speeding and ticket the driver for the appropriate amount.<br>Print a message with this information.
 
5. If the vehicle is speeding, check by how much it is speeding and ticket the driver for the appropriate amount.<br>Print a message with this information.
<pre>
+
{{CodeBlock
 +
|Code=
 
else
 
else
 
{
 
{
if(amountOverLimit > 40)
+
    if(amountOverLimit > 40)
{
+
    {
    ticket = 120;
+
        ticket = 120;
}
+
    }
else if(amountOverLimit > 20)
+
    else if(amountOverLimit > 20)
{
+
    {
      ticket = 80;
+
        ticket = 80;
}
+
    }
else
+
    else
{
+
    {
    ticket = 40;
+
        ticket = 40;
}
+
    }
 
 
JOptionPane.showMessageDialog("Vehicle is " + (amountOverLimit) + "over the limit. " +
+
  JOptionPane.showMessageDialog(null, "Vehicle is " + (amountOverLimit) + "over the limit. " +
        "The fine is $" + fine + ".");
+
  "The fine is $" + ticket + ".");
</pre>
+
}}
 
6. Add the amount of the ticket to the total ticket amount, and increment the number of speeding vehicles.<br>Close the else block opened in Step 5 and the while loop opened in Step 3.
 
6. Add the amount of the ticket to the total ticket amount, and increment the number of speeding vehicles.<br>Close the else block opened in Step 5 and the while loop opened in Step 3.
<pre>
+
{{CodeBlock
    ticketTotal += ticket
+
|Code=
    vehicleCount++;
+
ticketTotal += ticket
 +
        vehicleCount++;
 
     } //end else
 
     } //end else
 
} //end while
 
} //end while
</pre>
+
}}
 
7. Calculate the police officer's bonus.
 
7. Calculate the police officer's bonus.
<pre>
+
{{CodeBlock
bonus = (carCount/10) * 20;
+
|Code=
</pre>
+
bonus = (vehicleCount/10) * 20;
8. A final message dialog appears that states how many cars were speeding, the total amount of fines
+
}}
 +
8. A final message dialog appears that states how many cars were speeding, the sum total of fines
 
issued, and the total amount of the police officer's bonus.
 
issued, and the total amount of the police officer's bonus.
<pre>
+
{{CodeBlock
JOptionPane.showMessageDialog("A total of $" + ticketTotal + " in speeding tickets were issued for" +  
+
|Code=
totalVehicles + " vehicles. The officer receives a $" + bonus + " bonus.");
+
JOptionPane.showMessageDialog(null, "A total of $" + ticketTotal +  
</pre>
+
" in speeding tickets were issued for " + vehicleCount +  
 +
" vehicles. The officer receives a $" + bonus + " bonus.");
 +
}}
 
|SolutionCode =
 
|SolutionCode =
<pre>
 
 
import javax.swing.*;
 
import javax.swing.*;
  
Line 103: Line 111:
 
     {
 
     {
 
         //variable declarations
 
         //variable declarations
int speedLimit;
+
      int speedLimit;
int speed = 0;
+
      int speed = 0;
int amountOverLimit = 0;
+
      int amountOverLimit = 0;
int ticket = 0;
+
      int ticket = 0;
int ticketTotal = 0;
+
      int ticketTotal = 0;
int bonus = 0;
+
      int bonus = 0;
int vehicleCount = 0;
+
      int vehicleCount = 0;
        String input = "";
+
      String input = "";
+
//read in the speed limit from the input dialog
+
input = JOptionPane.showInputDialog("Enter the speed limit for the road.");
+
        speedLimit = Integer.parseInt(input);
+
 
   
 
   
while(speed != -1)
+
        //read in the speed limit from the input dialog
{
+
      input = JOptionPane.showInputDialog("Enter the speed limit for the road.");
    input = JOptionPane.showInputDialog("Speed of current vehicle is");
+
      speedLimit = Integer.parseInt(input); 
            speed = Integer.parseInt(input);
+
    amountOverLimit = speed - speedLimit;
+
      while(speed != -1)
+
      {
    //first check if the vehicle is over the speed limit
+
        input = JOptionPane.showInputDialog("Speed of current vehicle is:");
    if(amountOverLimit <= 0)
+
        speed = Integer.parseInt(input);
    {
+
        amountOverLimit = speed - speedLimit;
        ticket = 0;
+
 
+
          //first check if the vehicle is over the speed limit
JOptionPane.showMessageDialog("Vehicle is within the speed limit.");
+
        if(amountOverLimit <= 0)
    }
+
        {
    //if so, check by how much and determine the amount of the ticket
+
          ticket = 0;  
    else
+
          JOptionPane.showMessageDialog(null, "Vehicle is within the speed limit.");
    {
+
if(amountOverLimit > 40)
+
{
+
    ticket = 120;
+
}
+
else if(amountOverLimit > 20)
+
{
+
    ticket = 80;
+
}
+
else
+
{
+
    ticket = 40;
+
}
+
+
JOptionPane.showMessageDialog("Vehicle is " + (amountOverLimit) + "over the limit. The fine is $" + fine + ".");
+
 
+
    ticketTotal += ticket
+
    vehicleCount++;
+
}
+
 
         }
 
         }
+
          //if so, check by how much and determine the amount of the ticket
bonus = (carCount/10) * 20;
+
        else
+
        {
JOptionPane.showMessageDialog("A total of $" + ticketTotal + " in speeding tickets were issued for " +  
+
          if(amountOverLimit > 40)
        totalVehicles + " vehicles. The officer receives a $" + bonus + " bonus.");
+
        {
 +
          ticket = 120;
 +
        }
 +
        else if(amountOverLimit > 20)
 +
        {
 +
          ticket = 80;
 +
        }
 +
        else
 +
        {
 +
          ticket = 40;
 +
        }
 +
   
 +
        JOptionPane.showMessageDialog(null, "Vehicle is " + (amountOverLimit) +  
 +
                                  " over the limit. The fine is $" + ticket + ".");
 +
 
 +
        ticketTotal += ticket;
 +
        vehicleCount++;
 +
      }
 
     }
 
     }
 +
       
 +
    bonus = (vehicleCount/10) * 20;
 +
 
 +
    JOptionPane.showMessageDialog(null, "A total of $" + ticketTotal +
 +
        " in speeding tickets were issued for " + vehicleCount +
 +
        " vehicles. The officer receives a $" + bonus + " bonus.");
 +
  }
 
}
 
}
</pre>
 
 
}}
 
}}

Latest revision as of 20:14, 4 December 2011

Back to the Program-A-Day homepage

Problem

This program simulates a radar trap for catching people who are driving over the speed limit. We will use JOptionPane.showInputDialog for input and JOptionPane.showMessageDialog for output. We will assume that all user input will be in the form of integers. The user will first enter the speed limit for the road being monitored, and all subsequent inputs will be the speed of each vehicle that passes through the radar trap. An input of -1 ends the program.

If a vehicle is traveling at or under the speed limit, print a message stating that the vehicle is within the speed limit. Otherwise, if the vehicle is over the speed limit by 20 km/hr or less, the driver gets a $40 speeding ticket. If the vehicle is over by more than 20 km/hr and less than or equal to 40 km/hr, the driver gets an $80 ticket. If the vehicle is over by more than 40 km/hr, the driver gets a $120 ticket. In all cases where the vehicle is speeding, print a message stating by how much the vehicle is over the speed limit, and the applicable fine for that vehicle.

In addition, for every 10 cars that are caught, the police officer on duty receives a $20 bonus. You will need to keep track of this total separately from the speeding tickets.

Once the program has ended, it should print the total number of cars caught speeding, the sum total of all fines issued, and the total amount of the police officer's bonus.

 

String Methods and Debugging

Wiki array02.jpg

Solution

1. First declare the necessary variables.

 //variable declarations
int speedLimit;
int speed = 0;
int amountOverLimit = 0;
int ticket = 0;
int ticketTotal = 0;
int bonus = 0;
int vehicleCount = 0;
String input = ""; 

2. The first input dialog comes up asking for the speed limit of the road.
The input string must be parsed to an int.

 input = JOptionPane.showInputDialog("Enter the speed limit for the road.");
speedLimit = Integer.parseInt(input); 

3. Now the main loop begins. The user is asked to enter the current vehicle's speed, and the loop repeats as long as the user
does not enter -1. The input string must again be parsed to an int.

 while (speed != -1)
{
    input = JOptionPane.showInputDialog("Speed of current vehicle is");
    speed = Integer.parseInt(input);
    amountOverLimit = speed - speedLimit; 

4. Next, check if the vehicle is within the speed limit. If it is, print a message confirming this.

 if(amountOverLimit <= 0)
{
    ticket = 0;
    JOptionPane.showMessageDialog(null, "Vehicle is within the speed limit.");
} 

5. If the vehicle is speeding, check by how much it is speeding and ticket the driver for the appropriate amount.
Print a message with this information.

 else
{
    if(amountOverLimit > 40)
    {
        ticket = 120;
    }
    else if(amountOverLimit > 20)
    {
        ticket = 80;
    }
    else
    {
        ticket = 40;
    }
	
   JOptionPane.showMessageDialog(null, "Vehicle is " + (amountOverLimit) + "over the limit. " +
   "The fine is $" + ticket + "."); 

6. Add the amount of the ticket to the total ticket amount, and increment the number of speeding vehicles.
Close the else block opened in Step 5 and the while loop opened in Step 3.

 ticketTotal += ticket
        vehicleCount++;
    } //end else
} //end while 

7. Calculate the police officer's bonus.

 bonus = (vehicleCount/10) * 20; 

8. A final message dialog appears that states how many cars were speeding, the sum total of fines issued, and the total amount of the police officer's bonus.

 JOptionPane.showMessageDialog(null, "A total of $" + ticketTotal + 
" in speeding tickets were issued for " + vehicleCount + 
" vehicles. The officer receives a $" + bonus + " bonus."); 

Code

Solution Code

Back to the Program-A-Day homepage