0

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?

jweaver
  • 11
  • 7
  • 3
    Possible duplicate of [How do I compare strings in Java?](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – resueman Oct 14 '16 at 02:54

3 Answers3

0

You shouldn't check string equality using normal operators like "=" and "!=". Use the String .equals() method.

So your first line would be

while(!strInfo.equals("q"))

More info:

http://www.leepoint.net/data/expressions/22compareobjects.html

0

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);
Sahil Manchanda
  • 9,812
  • 4
  • 39
  • 89
0

The reason your code is not working is because you are trying to compare whether the contents of two strings are equal using == operator (which only compares if the two references point to the same object). == Operator does not compare the contents of the two strings.

In order to make your code work, you would need to use equals to compare the contents of the two strings as follows :

while(!strInfo.equals("q"))

Now lets try to delve deep into why your code is not working. For that we need to understand the basic difference between == & equals

== Operator is used to compare if both the references on its either side point to the same object (Basically you can say its similar to comparing address of the object to which the references point to).

Whereas equals in case of String compares the content of the two Strings. It is the responsibility of the creator of the class to override the default equals method to compare the objects of that class depending on what makes sense for that object. For example in case of String class the creators of the class have overriden the equals method to compare the contents of the Strings.

    String a = "test"; // lets say the object guy has address : 24
    String b = a; // now b points to the same object that is being referenced by a 
    System.out.println(a == b); // this will be true as both point to the same reference
    System.out.println(a.equals(b)); // this will  be true as the contents of both these strings is the same.

    // Now lets consider a new strings having same content "test"
    String c = "test";
    System.out.println(a == c); // this will be false as both point to the different references or memory location
    System.out.println(a.equals(c)); // this will be true as the contents of both these strings is the same.
Kakarot
  • 4,252
  • 2
  • 16
  • 18