Anyone here know how to fix this nested switch statement?

import java.util.Scanner;
public class cas {
public static void main(String []args){
Scanner soma = new Scanner(System.in);
System.out.println("Welcome to the speed calculator program!");

System.out.println("What measurement of distance are you using?");
String unitd = soma.next();
System.out.println("What measurement of time are you using?");
String unitt = soma.next();

System.out.println("Input the distance here v");
int d = soma.nextInt();
System.out.println("Input the time here v");
int t = soma.nextInt();
System.out.println("What is the preferred unit of measurement!");
String unit = soma.next();

switch (unitd) {
case "meter":
System.out.println("Thanks for letting me know!");
break;
case "kilometer":
System.out.println("Thanks for letting me know!");
int d2 = d / 1000;
break;
case "centimeter":
System.out.println("Thanks for letting me know!");
d2 = d * 100;
break;
case "millimeter":
System.out.println("Thanks for letting me know!");
d2 = d * 1000;
break;
case "mile":
System.out.println("Thanks for letting me know!");
d2 = d / 1609;
break;
case "nautical mile":
System.out.println("Thanks for letting me know!");
d2 = d * 1852;
break;



switch (unitt){
case "minutes":
System.out.println("Thanks for letting me know!");
int t2 = t * 60;
break;
case "hours":
System.out.println("Thanks for letting me know!");
t2 = t * 3600;
break;
case "seconds":
System.out.println("Thanks for letting me know!");
break;











switch (unit){
case "mps":

System.out.println("We are calculating in meters per second.");


int s1 = d2/t2;
System.out.println("Speed is "+ s1 +"m/s.");
break;
case "kmph":
System.out.println("We are calculating in kilometers per hour.");


int s2 = d2/t2;
System.out.println("Speed is "+ s2 +"km/h.");
break;
case "mph":
System.out.println("We are calculating in miles per hour.");


int s3 = d2/t2;
System.out.println("Speed is "+ s3 +"mph.");
break;
default:
System.out.println("Exiting Program...");
break;



}}}
}}

put the }'s in the correct places and handle default cases for each.

It would help to indent your code so you can more easily see which things belong together.

Here ya go:

import java.util.Scanner;

public class Cas {
  public static void main(String[] args) {
    Scanner soma = new Scanner(System.in);
    System.out.println("Welcome to the speed calculator program!");

    // Collect unit of distance and time
    System.out.println("What measurement of distance are you using?");
    String unitd = soma.next();
    System.out.println("What measurement of time are you using?");
    String unitt = soma.next();

    // Collect distance and time values
    System.out.println("Input the distance here v");
    int d = soma.nextInt();
    System.out.println("Input the time here v");
    int t = soma.nextInt();

    // Collect preferred unit of measurement
    System.out.println("What is the preferred unit of measurement!");
    String unit = soma.next();

    // Convert distance to meters if necessary
    int d2 = d;
    switch (unitd) {
      case "meter":
        System.out.println("Thanks for letting me know!");
        break;
      case "kilometer":
        System.out.println("Thanks for letting me know!");
        d2 = d * 1000;
        break;
      case "centimeter":
        System.out.println("Thanks for letting me know!");
        d2 = d / 100;
        break;
      case "millimeter":
        System.out.println("Thanks for letting me know!");
        d2 = d / 1000;
        break;
      case "mile":
        System.out.println("Thanks for letting me know!");
        d2 = d * 1609;
        break;
      case "nautical mile":
        System.out.println("Thanks for letting me know!");
        d2 = d * 1852;
        break;
      default:
        System.out.println("Unknown distance unit!");
        return;
    }

    // Convert time to seconds if necessary
    int t2 = t;
    switch (unitt) {
      case "minutes":
        System.out.println("Thanks for letting me know!");
        t2 = t * 60;
        break;
      case "hours":
        System.out.println("Thanks for letting me know!");
        t2 = t * 3600;
        break;
      case "seconds":
        System.out.println("Thanks for letting me know!");
        break;
      default:
        System.out.println("Unknown time unit!");
        return;
    }

    // Calculate speed based on preferred unit
    switch (unit) {
      case "mps":
        System.out.println("We are calculating in meters per second.");
        int s1 = d2 / t2;
        System.out.println("Speed is " + s1 + " m/s.");
        break;
      case "kmph":
        System.out.println("We are calculating in kilometers per hour.");
        int s2 = (d2 * 3600) / (t2 * 1000);
        System.out.println("Speed is " + s2 + " km/h.");
        break;
      case "mph":
        System.out.println("We are calculating in miles per hour.");
        int s3 = (d2 * 3600) / (t2 * 1609);
        System.out.println("Speed is " + s3 + " mph.");
        break;
      default:
        System.out.println("Exiting Program...");
        break;
    }
  }
}

This also fixes some potential issues (like d2 and t2 not being initialized properly) so the whole thing should work now.

2 Likes

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.