0

I wrote the following code that first generates a random value between 0-23 (which this value indicates the time of the day 0 means 00:00 am). Then it generates a second value between 0-6 which indicates the day where 0 means Sunday and 6 mean Saturday. After initials the time of day and the day of the week, A method speed will be called to get the speed of the car at that specific time. Is there any other way to improve the way of writing this code.

main method:

Random r = new Random();
int time_of_day = r.nextInt(24) + 0;
int day_of_week = r.nextInt(7) + 0;

Speed method:

public static double speed(int time_of_day, int day_of_week) {
double speed = 0;

switch(time_of_day) {
case 0: // 00:00 am
    if (day_of_week==0) { //Sun
        speed = 24.9;
    }else if (day_of_week==1) { // Mon
        speed = 26.5;
    }else if (day_of_week==2) {// Tues
        speed = 26.25;
    }else if (day_of_week==3) {// Wed
        speed = 27;
    }else if (day_of_week==4) {// Thur
        speed = 26.25;
    }else if (day_of_week==5) {// Fri
        speed = 26.25;
    }else if (day_of_week==6) {// Sat
        speed = 26.25;
    }
    break;
case 1: // 01:00 am
    if (day_of_week==0) {
        speed = 25.75;
    }else if (day_of_week==1) {
        speed = 26.6;
    }else if (day_of_week==2) {
        speed = 27;
    }else if (day_of_week==3) {
        speed = 27.1;
    }else if (day_of_week==4) {
        speed = 26.8;
    }else if (day_of_week==5) {
        speed = 26.4;
    }else if (day_of_week==6) {
        speed = 26.75;
    }
    break;
case 2: // 02:00 am
    if (day_of_week==0) {
        speed = 26.1;
    }else if (day_of_week==1) {
        speed = 27.25;
    }else if (day_of_week==2) {
        speed = 26.35;
    }else if (day_of_week==3) {
        speed = 26.9;
    }else if (day_of_week==4) {
        speed = 26.5;
    }else if (day_of_week==5) {
        speed = 26.55;
    }else if (day_of_week==6) {
        speed = 26.75;
    }
    break;
case 3: // 03:00 am
    if (day_of_week==0) {
        speed = 25.9;
    }else if (day_of_week==1) {
        speed = 27.2;
    }else if (day_of_week==2) {
        speed = 27.25;
    }else if (day_of_week==3) {
        speed = 26.9;
    }else if (day_of_week==4) {
        speed = 26.75;
    }else if (day_of_week==5) {
        speed = 26.75;
    }else if (day_of_week==6) {
        speed = 26.75;
    }
    break;
case 4: // 04:00 am
    if (day_of_week==0) {
        speed = 27;
    }else if (day_of_week==1) {
        speed = 27;
    }else if (day_of_week==2) {
        speed = 27.25;
    }else if (day_of_week==3) {
        speed = 27.5;
    }else if (day_of_week==4) {
        speed = 27.9;
    }else if (day_of_week==5) {
        speed = 26.95;
    }else if (day_of_week==6) {
        speed = 27;
    }
    break;
case 5: // 05:00 am
    if (day_of_week==0) {
        speed = 28.5;
    }else if (day_of_week==1) {
        speed = 28.5;
    }else if (day_of_week==2) {
        speed = 27.75;
    }else if (day_of_week==3) {
        speed = 27.5;
    }else if (day_of_week==4) {
        speed = 27.25;
    }else if (day_of_week==5) {
        speed = 28;
    }else if (day_of_week==6) {
        speed = 28.5;
    }
    break;
case 6: // 06:00 am
    if (day_of_week==0) {
        speed = 27.6; //here
    }else if (day_of_week==1) {
        speed = 23.5;
    }else if (day_of_week==2) {
        speed = 23.5;
    }else if (day_of_week==3) {
        speed = 23.5;
    }else if (day_of_week==4) {
        speed = 23.25;
    }else if (day_of_week==5) {
        speed = 23.5;
    }else if (day_of_week==6) {
        speed = 27.6;
    }
    break;
case 7: // 07:00 am
    if (day_of_week==0) { //S
        speed = 27.5; //here
    }else if (day_of_week==1) {//M
        speed = 20.5;
    }else if (day_of_week==2) {//T
        speed = 20.15;
    }else if (day_of_week==3) {//W
        speed = 20.15;
    }else if (day_of_week==4) {//T
        speed = 20.5;
    }else if (day_of_week==5) {//F
        speed = 23.8;
    }else if (day_of_week==6) {//S
        speed = 27.5;
    }
    break;
case 8: // 08:00 am
    if (day_of_week==0) { //S
        speed = 26; //here
    }else if (day_of_week==1) {//M
        speed = 21.5;
    }else if (day_of_week==2) {//T
        speed = 20.75;
    }else if (day_of_week==3) {//W
        speed = 21.10;
    }else if (day_of_week==4) {//T
        speed = 21.10;
    }else if (day_of_week==5) {//F
        speed = 22.10;
    }else if (day_of_week==6) {//S
        speed = 25;
    }
    break;
case 9: // 09:00 am
    if (day_of_week==0) { //S
        speed = 25.5; //here
    }else if (day_of_week==1) {//M
        speed = 22.6;
    }else if (day_of_week==2) {//T
        speed = 21.75;
    }else if (day_of_week==3) {//W
        speed = 22.40;
    }else if (day_of_week==4) {//T
        speed = 22;
    }else if (day_of_week==5) {//F
        speed = 22.15;
    }else if (day_of_week==6) {//S
        speed = 23.40;
    }
    break;
case 10: // 10:00 am
    if (day_of_week==0) { //S
        speed = 24; //here
    }else if (day_of_week==1) {//M
        speed = 22.25;
    }else if (day_of_week==2) {//T
        speed = 21.8;
    }else if (day_of_week==3) {//W
        speed = 22.5;
    }else if (day_of_week==4) {//T
        speed = 22.25;
    }else if (day_of_week==5) {//F
        speed = 22.25;
    }else if (day_of_week==6) {//S
        speed = 22;
    }
    break;
case 11: // 11:00 am
    if (day_of_week==0) { //S
        speed = 23; //here
    }else if (day_of_week==1) {//M
        speed = 22;
    }else if (day_of_week==2) {//T
        speed = 22;
    }else if (day_of_week==3) {//W
        speed = 22.25;
    }else if (day_of_week==4) {//T
        speed = 21.25;
    }else if (day_of_week==5) {//F
        speed = 21.25;
    }else if (day_of_week==6) {//S
        speed = 21;
    }
    break;
case 12: // 12:00 Pm
    if (day_of_week==0) { //S
        speed = 21.90; //here
    }else if (day_of_week==1) {//M
        speed = 22.25;
    }else if (day_of_week==2) {//T
        speed = 21.90;
    }else if (day_of_week==3) {//W
        speed = 21.75;
    }else if (day_of_week==4) {//T
        speed = 21.50;
    }else if (day_of_week==5) {//F
        speed = 21.10;
    }else if (day_of_week==6) {//S
        speed = 20.75;
    }
    break;
case 13: // 13:00 Pm
    if (day_of_week==0) { //S
        speed = 22.5; //here
    }else if (day_of_week==1) {//M
        speed = 21.5;
    }else if (day_of_week==2) {//T
        speed = 21.45;
    }else if (day_of_week==3) {//W
        speed = 20.95;
    }else if (day_of_week==4) {//T
        speed = 21;
    }else if (day_of_week==5) {//F
        speed = 20.8;
    }else if (day_of_week==6) {//S
        speed = 20.9;
    }
    break;
case 14: // 14:00 Pm
    if (day_of_week==0) { //S
        speed = 22.4; //here
    }else if (day_of_week==1) {//M
        speed = 21.10;
    }else if (day_of_week==2) {//T
        speed = 20.5;
    }else if (day_of_week==3) {//W
        speed = 20.90;
    }else if (day_of_week==4) {//T
        speed = 20.25;
    }else if (day_of_week==5) {//F
        speed = 20;
    }else if (day_of_week==6) {//S
        speed = 20.25;
    }
    break;
case 15: // 15:00 Pm
    if (day_of_week==0) { //S
        speed = 22.75; //here
    }else if (day_of_week==1) {//M
        speed = 21;
    }else if (day_of_week==2) {//T
        speed = 20;
    }else if (day_of_week==3) {//W
        speed = 20.75;
    }else if (day_of_week==4) {//T
        speed = 20.10;
    }else if (day_of_week==5) {//F
        speed = 19.3;
    }else if (day_of_week==6) {//S
        speed = 20.95;
    }
    break;
case 16: 
    if (day_of_week==0) { //S
        speed = 23; //here
    }else if (day_of_week==1) {//M
        speed = 20.60;
    }else if (day_of_week==2) {//T
        speed = 20;
    }else if (day_of_week==3) {//W
        speed = 20;
    }else if (day_of_week==4) {//T
        speed = 20.15;
    }else if (day_of_week==5) {//F
        speed = 19.75;
    }else if (day_of_week==6) {//S
        speed = 22;
    }
    break;
case 17: 
    if (day_of_week==0) { //S
        speed = 23.90; //here
    }else if (day_of_week==1) {//M
        speed = 22;
    }else if (day_of_week==2) {//T
        speed = 20.5;
    }else if (day_of_week==3) {//W
        speed = 20.5;
    }else if (day_of_week==4) {//T
        speed = 20.5;
    }else if (day_of_week==5) {//F
        speed = 21.25;
    }else if (day_of_week==6) {//S
        speed = 22.10;
    }
    break;
case 18: 
    if (day_of_week==0) { //S
        speed = 23.75; //here
    }else if (day_of_week==1) {//M
        speed = 22.5;
    }else if (day_of_week==2) {//T
        speed = 22;
    }else if (day_of_week==3) {//W
        speed = 22;
    }else if (day_of_week==4) {//T
        speed = 22;
    }else if (day_of_week==5) {//F
        speed = 21.75;
    }else if (day_of_week==6) {//S
        speed = 23;
    }
    break;
case 19:
    if (day_of_week==0) { //S
        speed = 24.4; //here
    }else if (day_of_week==1) {//M
        speed = 24;
    }else if (day_of_week==2) {//T
        speed = 23.75;
    }else if (day_of_week==3) {//W
        speed = 23.5;
    }else if (day_of_week==4) {//T
        speed = 23;
    }else if (day_of_week==5) {//F
        speed = 22.25;
    }else if (day_of_week==6) {//S
        speed = 23.10;
    }
    break;
case 20: 
    if (day_of_week==0) { //S
        speed = 25; //here
    }else if (day_of_week==1) {//M
        speed = 24.5;
    }else if (day_of_week==2) {//T
        speed = 24.25;
    }else if (day_of_week==3) {//W
        speed = 24.25;
    }else if (day_of_week==4) {//T
        speed = 24;
    }else if (day_of_week==5) {//F
        speed = 23.6;
    }else if (day_of_week==6) {//S
        speed = 24.0;
    }
    break;
case 21: 
    if (day_of_week==0) { //S
        speed = 25; //here
    }else if (day_of_week==1) {//M
        speed = 25;
    }else if (day_of_week==2) {//T
        speed = 24.5;
    }else if (day_of_week==3) {//W
        speed = 24.5;
    }else if (day_of_week==4) {//T
        speed = 24.25;
    }else if (day_of_week==5) {//F
        speed = 24.25;
    }else if (day_of_week==6) {//S
        speed = 24.20;
    }
    break;
case 22: 
    if (day_of_week==0) { //S
        speed = 25.75; //here
    }else if (day_of_week==1) {//M
        speed = 26;
    }else if (day_of_week==2) {//T
        speed = 25.80;
    }else if (day_of_week==3) {//W
        speed = 25.20;
    }else if (day_of_week==4) {//T
        speed = 24.5;
    }else if (day_of_week==5) {//F
        speed = 24.5;
    }else if (day_of_week==6) {//S
        speed = 24.5;
    }
    break;
case 23:
    if (day_of_week==0) { //S
        speed = 26.5; //here
    }else if (day_of_week==1) {//M
        speed = 26.40;
    }else if (day_of_week==2) {//T
        speed = 25.75;
    }else if (day_of_week==3) {//W
        speed = 26;
    }else if (day_of_week==4) {//T
        speed = 25;
    }else if (day_of_week==5) {//F
        speed = 25;
    }else if (day_of_week==6) {//S
        speed = 24.45;
    }
    break;
}
return speed;}

Edit: The issue has been discussed in another thread. However, I was looking for a way to combine switch and nested if statements together in an optimisation way.

Maya
  • 27
  • 6
  • 2
    I think you should ask this question on: codereview.stackexchange.com – Kamil W Oct 25 '18 at 13:54
  • 2
    How have you worked out the speed values in your code? Is there something you're referencing? – Royal Wares Oct 25 '18 at 13:56
  • Possible duplicate of [Ways to eliminate switch in code](https://stackoverflow.com/questions/126409/ways-to-eliminate-switch-in-code) – sidgate Oct 25 '18 at 13:57
  • @AlexanderDeSousa Actually, I have extracted them manually from a chart based on the required parameters (Day and time) – Maya Oct 25 '18 at 14:09

2 Answers2

5

What you currently have is basically a matrix.

private double[][] speedMatrix = {
           {24.9, 26.5, 26.25, 27, 26.25, 26.25, 26.25}, 
           // 23 more lines like this, with values for speed
};

You can then refactor the speed method to:

public static double speed(int time_of_day, int day_of_week) {
    return speedMatrix[time_of_day][day_of_week];
}

Although at this point you no longer really need the speed method and you can just read from speedMatrix instead.

0

What you are setting up there is data and data is not normally hard-coded in a program like that. You would normally read that kind of thing from a file or a database.

A common format for this is a CSV file (comma separated values).

The accepted answer correctly states that your data should be loaded in a matrix.

This answer reading a csv file into a array provides an example of how to load a CSV file into a matrix. With the accepted answer, it is a list of lists of strings rather than an array of arrays of doubles, but you should be able to adapt it easily enough.

rghome
  • 8,529
  • 8
  • 43
  • 62