I am creating a program that asks users diagnostic questions and then asks a another question, the new question being selected based on their previous answer. It is based on the image which was taken from a Chapter assignment in a textbook. I have gotten the program to work, but to me my solution seems inefficient, I am wondering if there is a more efficient means of completing my task. The goal of the program is to take in user symptoms and then provide a diagnosis based on those symptoms. To me having that many switches inside of each other looks messy.
import java.util.*;
public class Diagnostic2 {
//main(): application entry point
public static void main(String[] args) {
System.out.println("\nFever Diagnostic Tool");
System.out.println("=====================");
System.out.println("\nDisclaimer: This tool is meant primarily to act as an indicator ");
System.out.println("of possible causes of fever symptoms. It is not meant to replace");
System.out.println("professional medical advise. If you believe you are sick ");
System.out.println("consult with your doctor about your symptoms.");
Scanner stdin = new Scanner(System.in);
System.out.print("\nDo you have a fever? (y/n): ");
char fever = stdin.next().trim().charAt(0);
String diagnosis = "Insufficient information to make diagnosis\n";
char cough = 'n';
char wheeze = 'n';
char headache = 't';
char achyJoints = 'n';
char rash = 'n';
char soreThroat = 'n';
char backPain = 'n';
char urinaryPain = 'n';
char tooHot = 'n';
char diarrhea = 'n';
char vomit = 'n';
switch (fever) {
case 'y':
System.out.print("\nAre you coughing? (y/n): ");
cough = stdin.next().trim().charAt(0);
switch (cough) {
case 'y':
System.out.print("\nAre you short of breath, wheezing, or coughing up phlegm? (y/n): ");
wheeze = stdin.next().trim().charAt(0);
switch (wheeze) {
case 'y':
diagnosis = "Possibilites include pneumonia or infection of airways.\n";
break;
case 'n':
System.out.print("\nDo you have a headache? (y/n): ");
headache = stdin.next().trim().charAt(0);
switch(headache) {
case 'y':
diagnosis = "Possibilites include viral infection.\n";
break;
case 'n':
System.out.print("\nDo you have a aching bones or joints? (y/n): ");
achyJoints = stdin.next().trim().charAt(0);
switch(achyJoints) {
case 'y':
diagnosis = "Possibilites include viral infection.\n";
break;
case 'n':
System.out.print("\nDo you have a rash? (y/n): ");
rash = stdin.next().trim().charAt(0);
switch(rash) {
case 'y':
diagnosis = "Insufficient information to list possibilities, consult with doctor.\n";
break;
case 'n':
System.out.print("\nDo you have a sore throat? (y/n): ");
soreThroat = stdin.next().trim().charAt(0);
switch(soreThroat) {
case 'y':
diagnosis = "Possibilites include throat infection.\n";
break;
case 'n':
System.out.print("\nDo you have back pain just above the waist with chills and fever? (y/n): ");
backPain = stdin.next().trim().charAt(0);
switch(backPain) {
case 'y':
diagnosis = "Possibilites include kidney infection.\n";
break;
case 'n':
System.out.print("\nDo you have pain urinating or are urinating more often? (y/n): ");
urinaryPain = stdin.next().trim().charAt(0);
switch(urinaryPain) {
case 'y':
diagnosis = "Possibilites include urinary tract infection.\n";
break;
case 'n':
System.out.print("\nHave you spent the day in the sun or hot conditions? (y/n): ");
tooHot = stdin.next().trim().charAt(0);
switch(tooHot) {
case 'y':
diagnosis = "Possibilites include sun stroke or heat exhaustion.\n";
break;
case 'n':
break;
}
}
}
}
}
}
}
}
break;
case 'n':
System.out.print("\nDo you have a headache? (y/n): ");
headache = stdin.next().trim().charAt(0);
switch(headache) {
case 'y':
System.out.println("\nAre you experiencing any of the following: pain when");
System.out.println("bending your head forward, nausea or vomiting, bright");
System.out.print("light hurting your eyes, drowsiness, or confusion? (y/n): ");
vomit = stdin.next().trim().charAt(0);
switch(vomit){
case 'y':
diagnosis = "Possibilites include meningitis.\n";
break;
case 'n':
System.out.print("\nAre you vomiting, or have had diarrhea? (y/n): ");
diarrhea = stdin.next().trim().charAt(0);
switch(diarrhea) {
case 'y':
diagnosis = "Possibilites include digestive tract infection.\n";
break;
case 'n':
System.out.print("\nDo you have a aching bones or joints? (y/n): ");
achyJoints = stdin.next().trim().charAt(0);
switch(achyJoints) {
case 'y':
diagnosis = "Possibilites include viral infection.\n";
break;
case 'n':
System.out.print("\nDo you have a rash? (y/n): ");
rash = stdin.next().trim().charAt(0);
switch(rash) {
case 'y':
diagnosis = "Insufficient information to list possibilities, consult with doctor.\n";
break;
case 'n':
System.out.print("\nDo you have a sore throat? (y/n): ");
soreThroat = stdin.next().trim().charAt(0);
switch(soreThroat) {
case 'y':
diagnosis = "Possibilites include throat infection.\n";
break;
case 'n':
System.out.print("Do you have back pain just above the waist with chills and fever? (y/n): ");
backPain = stdin.next().trim().charAt(0);
switch(backPain) {
case 'y':
diagnosis = "Possibilites include kidney infection.\n";
break;
case 'n':
System.out.print("\nDo you have pain urinating or are urinating more often? (y/n): ");
urinaryPain = stdin.next().trim().charAt(0);
switch(urinaryPain) {
case 'y':
diagnosis = "Possibilites include urinary tract infection.\n";
break;
case 'n':
System.out.print("\nHave you spent the day in the sun or hot conditions? (y/n): ");
tooHot = stdin.next().trim().charAt(0);
switch(tooHot) {
case 'y':
diagnosis = "Possibilites include sun stroke or heat exhaustion.\n";
break;
case 'n':
break;
}
}
}
}
}
}
}
}
break;
case 'n':
System.out.print("\nDo you have a aching bones or joints? (y/n): ");
achyJoints = stdin.next().trim().charAt(0);
switch(achyJoints) {
case 'y':
diagnosis = "Possibilites include viral infection.\n";
break;
case 'n':
System.out.print("\nDo you have a rash? (y/n): ");
rash = stdin.next().trim().charAt(0);
switch(rash) {
case 'y':
diagnosis = "Insufficient information to list possibilities, consult with doctor.\n";
break;
case 'n':
System.out.print("\nDo you have a sore throat? (y/n): ");
soreThroat = stdin.next().trim().charAt(0);
switch(soreThroat) {
case 'y':
diagnosis = "Possibilites include throat infection.\n";
break;
case 'n':
System.out.print("\nDo you have back pain just above the waist with chills and fever? (y/n): ");
backPain = stdin.next().trim().charAt(0);
switch(backPain) {
case 'y':
diagnosis = "Possibilites include kidney infection.\n";
break;
case 'n':
System.out.print("\nDo you have pain urinating or are urinating more often? (y/n): ");
urinaryPain = stdin.next().trim().charAt(0);
switch(urinaryPain) {
case 'y':
diagnosis = "Possibilites include urinary tract infection.\n";
break;
case 'n':
System.out.print("\nHave you spent the day in the sun or hot conditions? (y/n): ");
tooHot = stdin.next().trim().charAt(0);
switch(tooHot) {
case 'y':
diagnosis = "Possibilites include sun stroke or heat exhaustion.\n";
break;
case 'n':
break;
}
}
}
}
}
}
}
}
case 'n':
break;
}
System.out.println("--------------------------------------------------------------");
System.out.println("\nSymptoms");
if(fever == 'y') {
System.out.println("*\tFever");
}
if(cough == 'y') {
System.out.println("*\tCough");
}
if(wheeze == 'y') {
System.out.println("*\tWheezing");
}
if(headache == 'y') {
System.out.println("*\tHeadache");
}
if(achyJoints == 'y') {
System.out.println("*\tAchy joints or bones");
}
if(rash == 'y') {
System.out.println("*\tRash");
}
if(soreThroat == 'y') {
System.out.println("*\tSore throat");
}
if(backPain == 'y') {
System.out.println("*\tBack pain");
}
if(urinaryPain == 'y') {
System.out.println("*\tFrequent urination or pain urinating");
}
if(tooHot == 'y') {
System.out.println("*\tDay spent in hot conditions");
}
if(diarrhea == 'y') {
System.out.println("*\tDiarrhea");
}
if(vomit == 'y') {
System.out.println("*\tPain when bending head forward, nausea or vomiting,");
System.out.println("\tbright light hurting eyes, drowsiness or confusion.");
}
System.out.println("\nDiagnosis");
System.out.println("\t" + diagnosis);
}
}