Search code examples
javabluej

How to make this code decline String other than q


I still a little bit new so I'm going to include all of my java code and then explain what I am looking for.

import java.util.Scanner;
public class Part_I{
    public static Scanner input = new Scanner(System.in);
    public static String strInfo;
    public static int number;
    public static void main(String[] args){
        String presidents[][] = {
        {"1 ","George"," ","Washington"," (1789-1797) ","John Adams"},
        {"2 ","John"," ","Adams"," (1797-1801) ","Thomas Jefferson"},
        {"3 ","Thomas"," ","Jefferson"," (1801-1809) ","Aaron Burr"},
        {"4 ","James"," ","Madison"," (1809-1817) ","George Clinton"},
        {"5 ","James"," ","Monroe"," (1817-1825) ","Daniel D. Tompkins"},
        {"6 ","John"," Quincy ","Adams"," (1825-1829) ","John C. Calhoun"},
        {"7 ","Andrew"," ","Jackson"," (1829-1837) ","John C. Calhoun"},
        {"8 ","Martin"," Van ","Buren"," (1837-1841) ","Richard M. Johnson"},
        {"9 ","William"," Henry ","Harrison"," (1841) ","John Tyler"},
        {"10 ","John"," ","Tyler"," (1841-1845) ","None"},
        {"11 ","James"," K. ","Polk"," (1845-1849) ","George M. Dallas"},
        {"12 ","Zachary"," ","Taylor"," (1849-1850) ","Millard Fillmore"},
        {"13 ","Millard"," ","Fillmore"," (1850-1853) ","None"},
        {"14 ","Franklin"," ","Pierce"," (1853-1857) ","William King"},
        {"15 ","James"," ","Buchanan"," (1857-1861) ","John C. Breckinridge"},
        {"16 ","Abraham"," ","Lincoln"," (1861-1865) ","Hannibal Hamlin"},
        {"17 ","Andrew"," ","Johnson"," (1865-1869) ","None"},
        {"18 ","Ulysses"," S. ","Grant"," (1869-1877) ","Schuyler Colfax"},
        {"19 ","Rutherford"," B. ","Hayes"," (1877-1881) ","William Wheeler"},
        {"20 ","James"," A. ","Garfield"," (1881) ","Chester Arthur"},
        {"21 ","Chester"," ","Arthur"," (1881-1885) ","None"},
        {"22 ","Grover"," ","Cleveland"," (1885-1889) ","Thomas Hendricks"},
        {"23 ","Benjamin"," ","Harrison"," (1889-1893) ","Levi P. Morton"},
        {"24 ","Grover"," ","Cleveland"," (1893-1897) ","Adlai E. Stevenson"},
        {"25 ","William"," ","McKinley"," (1897-1901) ","Garret Hobart"},
        {"26 ","Theodore"," ","Roosevelt"," (1901-1909) ","None"},
        {"27 ","William"," Howard ","Taft"," (1909-1913) ","James S. Sherman"},
        {"28 ","Woodrow"," ","Wilson"," (1913-1921) ","Thomas R. Marshall"},
        {"29 ","Warren"," G. ","Harding"," (1921-1923) ","Calvin Coolidge"},
        {"30 ","Calvin"," ","Coolidge"," (1923-1929) ","None"},
        {"31 ","Herbert"," ","Hoover"," (1929-1933) ","Charles Curtis"},
        {"32 ","Franklin"," D. ","Roosevelt"," (1933-1945) ","John Nance Garner"},
        {"33 ","Harry"," S. ","Truman"," (1945-1953) ","None"},
        {"34 ","Dwight"," D. ","Eisenhower"," (1953-1961) ","Richard Nixon"},
        {"35 ","John"," F. ","Kennedy"," (1961-1963) ","Lyndon B. Johnson"},
        {"36 ","Lyndon"," B. ","Johnson"," (1963-1969) ","None"},
        {"37 ","Richard"," ","Nixon"," (1969-1974) ","Spiro Agnew"},
        {"38 ","Gerald"," ","Ford"," (1974-1977) ","Nelson Rockefeller"},
        {"39 ","Jimmy"," ","Carter"," (1977-1981) ","Walter Mondale"},
        {"40 ","Ronald"," ","Reagan"," (1981-1989) ","George Bush"},
        {"41 ","George"," ","Bush"," (1989-1993) ","Dan Quayle"},
        {"42 ","Bill"," ","Clinton"," (1993-2001) ","Al Gore"},
        {"43 ","George"," W. ","Bush"," (2001-2009) ","Dick Cheney"},
        {"44 ","Barack"," ","Obama"," (2009-2017) ","Joe Biden"},
        };
        System.out.println("This will display the President and VP of the United States based on the number you provide.");
        System.out.println("Please enter a number between 1 and 44 to see information or q to quit: ");
        strInfo = input.nextLine();
        while(strInfo != "q"){
            if(isInteger(strInfo)){    
                number = Integer.parseInt(strInfo);
                if (number >= 1 && number <=44){
                    System.out.println();
                    System.out.println(presidents[number-1][0] + "President " + presidents[number-1][1] + presidents[number-1][2] + presidents[number-1][3] + presidents[number-1][4] + "Vice President " + presidents[number-1][5]);
                    System.out.println();
                    System.out.println("Please enter a number between 1 and 44 to see information or q to quit: ");
                    strInfo = input.nextLine();
                }else{
                    System.out.println();
                    System.out.println("Wrong Input! Please enter number 1-44 or q to quit.");
                    strInfo = input.nextLine();
                }
            }else{
                System.out.println();
                System.out.println("This program has been terminated. Good Bye!");
                System.exit(0);
            }
        }
    }
    public static boolean isInteger(String strInfo){
        if (strInfo == null) {
            return false;
        }
        int length = strInfo.length();
        if (length == 0) {
            return false;
        }
        int i = 0;
        if (strInfo.charAt(0) == '-') {
            if (length == 1) {
                return false;
            }
            i = 1;
        }
        for (; i < length; i++) {
            char c = strInfo.charAt(i);
            if (c < '0' || c > '9') {
                return false;
            }
        }
        return true;
    }
}

My main concern is with the while loop.

while(strInfo != "q"){
    if(isInteger(strInfo)){    
        number = Integer.parseInt(strInfo);
        if (number >= 1 && number <=44){
            System.out.println();
            System.out.println(presidents[number-1][0] + "President " + presidents[number-1][1] + presidents[number-1][2] + presidents[number-1][3] + presidents[number-1][4] + "Vice President " + presidents[number-1][5]);
            System.out.println();
            System.out.println("Please enter a number between 1 and 44 to see information or q to quit: ");
            strInfo = input.nextLine();
        }else{
            System.out.println();
            System.out.println("Wrong Input! Please enter number 1-44 or q to quit.");
            strInfo = input.nextLine();
        }
    }else{
        System.out.println();
        System.out.println("This program has been terminated. Good Bye!");
        System.exit(0);
    }
  }
}

I want to make it so that it any string other than what is able to be converted to an int or "q" would say wrong input and make you input another string value. Right now, any string will make the program terminate. What should I change in that while loop and how should I change it or what should it look like instead so that if the string input is not q or convertible to an int will make wrong input display and ask for input again?


Solution

  • This will help you in achieving what you want to do

     while (!strInfo.equals("q")) {
                if (isInteger(strInfo)) {
                    number = Integer.parseInt(strInfo);
                    if (number >= 1 && number <= 44) {
                        System.out.println();
                        System.out.println(presidents[number - 1][0] + "President " + presidents[number - 1][1] + presidents[number - 1][2] + presidents[number - 1][3] + presidents[number - 1][4] + "Vice President " + presidents[number - 1][5]);
                        System.out.println();
                        System.out.println("Please enter a number between 1 and 44 to see information or q to quit: ");
                        strInfo = input.nextLine();
                    } else {
                        System.out.println();
                        System.out.println("Wrong Input! Please enter number 1-44 or q to quit.");
                        strInfo = input.nextLine();
                    }
                } else {
                    System.out.println();
                    System.out.println("Wrong Input! Please enter number 1-44 or q to quit.");
                    strInfo = input.nextLine();
                }
            }
            System.out.println();
            System.out.println("This program has been terminated. Good Bye!");
            System.exit(0);