nextInt() method of Scanner class does not ask me for input again in while loop?









up vote
0
down vote

favorite












In my main method is this code:



int hours = getHours();


Here is the get hours() code:



public static int getHours() 

int hours = 0;
boolean hoursNotOk = true;

do
try
hours = console.nextInt();
hoursNotOk = false;

catch(Exception e)
System.out.print(e);



finally
if(hoursNotOk)
System.out.print(", please re-enter the hours again:");

else
System.out.print("**hours input accepted**");


while(hoursNotOk);


return hours;



For the first time console.nextInt() ask me for input, so lets say I put in a "two" in the console, it will throw an exception and loop through the try block again but this time it did not ask me for input and keeps printing out from the catch and finally block, why is this happening?










share|improve this question





















  • Well, that's because you are not asking for input anywhere but the finally block.
    – Guy
    Nov 11 at 12:19














up vote
0
down vote

favorite












In my main method is this code:



int hours = getHours();


Here is the get hours() code:



public static int getHours() 

int hours = 0;
boolean hoursNotOk = true;

do
try
hours = console.nextInt();
hoursNotOk = false;

catch(Exception e)
System.out.print(e);



finally
if(hoursNotOk)
System.out.print(", please re-enter the hours again:");

else
System.out.print("**hours input accepted**");


while(hoursNotOk);


return hours;



For the first time console.nextInt() ask me for input, so lets say I put in a "two" in the console, it will throw an exception and loop through the try block again but this time it did not ask me for input and keeps printing out from the catch and finally block, why is this happening?










share|improve this question





















  • Well, that's because you are not asking for input anywhere but the finally block.
    – Guy
    Nov 11 at 12:19












up vote
0
down vote

favorite









up vote
0
down vote

favorite











In my main method is this code:



int hours = getHours();


Here is the get hours() code:



public static int getHours() 

int hours = 0;
boolean hoursNotOk = true;

do
try
hours = console.nextInt();
hoursNotOk = false;

catch(Exception e)
System.out.print(e);



finally
if(hoursNotOk)
System.out.print(", please re-enter the hours again:");

else
System.out.print("**hours input accepted**");


while(hoursNotOk);


return hours;



For the first time console.nextInt() ask me for input, so lets say I put in a "two" in the console, it will throw an exception and loop through the try block again but this time it did not ask me for input and keeps printing out from the catch and finally block, why is this happening?










share|improve this question













In my main method is this code:



int hours = getHours();


Here is the get hours() code:



public static int getHours() 

int hours = 0;
boolean hoursNotOk = true;

do
try
hours = console.nextInt();
hoursNotOk = false;

catch(Exception e)
System.out.print(e);



finally
if(hoursNotOk)
System.out.print(", please re-enter the hours again:");

else
System.out.print("**hours input accepted**");


while(hoursNotOk);


return hours;



For the first time console.nextInt() ask me for input, so lets say I put in a "two" in the console, it will throw an exception and loop through the try block again but this time it did not ask me for input and keeps printing out from the catch and finally block, why is this happening?







java exception-handling try-catch do-while






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 11 at 12:05









Nigel Ng

436




436











  • Well, that's because you are not asking for input anywhere but the finally block.
    – Guy
    Nov 11 at 12:19
















  • Well, that's because you are not asking for input anywhere but the finally block.
    – Guy
    Nov 11 at 12:19















Well, that's because you are not asking for input anywhere but the finally block.
– Guy
Nov 11 at 12:19




Well, that's because you are not asking for input anywhere but the finally block.
– Guy
Nov 11 at 12:19












2 Answers
2






active

oldest

votes

















up vote
2
down vote













Because nextInt() only reads the number, and not the n appended after you hit return, you need to clear that before you can read a number again, in this example I do nextLine() in the catch block. here's more indepth explanation



Working example:



public static int getHours() 
int hours = 0;
boolean hoursNotOk = true;

do
try
System.out.println("Here");
hours = console.nextInt();
hoursNotOk = false;

catch (Exception e)
e.printStackTrace();
console.nextLine();
finally
if (hoursNotOk)
System.out.println(", please re-enter the hours again:");

else
System.out.println("**hours input accepted**");



while (hoursNotOk);

return hours;






share|improve this answer






















  • If I just put this in the main method while(true) someVar = console.nextInt(); why would it not need console.nextLine()?
    – Nigel Ng
    Nov 11 at 12:59










  • @NigelNg If I try that it either works when I enter a number or throws an exception when I enter a character.
    – Mark
    Nov 11 at 15:34


















up vote
1
down vote













A simpler approach is to test whether you can read an int before throwing an exception. In any case, you need to discard the current word or line before trying again.



public static int getHours() 
while (true)
if (console.hasNextInt())
System.out.print("**hours input accepted**");
return console.nextInt();

console.nextLine(); // discard the line and try again
System.out.print(", please re-enter the hours again:");







share|improve this answer




















    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53248559%2fnextint-method-of-scanner-class-does-not-ask-me-for-input-again-in-while-loop%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    2
    down vote













    Because nextInt() only reads the number, and not the n appended after you hit return, you need to clear that before you can read a number again, in this example I do nextLine() in the catch block. here's more indepth explanation



    Working example:



    public static int getHours() 
    int hours = 0;
    boolean hoursNotOk = true;

    do
    try
    System.out.println("Here");
    hours = console.nextInt();
    hoursNotOk = false;

    catch (Exception e)
    e.printStackTrace();
    console.nextLine();
    finally
    if (hoursNotOk)
    System.out.println(", please re-enter the hours again:");

    else
    System.out.println("**hours input accepted**");



    while (hoursNotOk);

    return hours;






    share|improve this answer






















    • If I just put this in the main method while(true) someVar = console.nextInt(); why would it not need console.nextLine()?
      – Nigel Ng
      Nov 11 at 12:59










    • @NigelNg If I try that it either works when I enter a number or throws an exception when I enter a character.
      – Mark
      Nov 11 at 15:34















    up vote
    2
    down vote













    Because nextInt() only reads the number, and not the n appended after you hit return, you need to clear that before you can read a number again, in this example I do nextLine() in the catch block. here's more indepth explanation



    Working example:



    public static int getHours() 
    int hours = 0;
    boolean hoursNotOk = true;

    do
    try
    System.out.println("Here");
    hours = console.nextInt();
    hoursNotOk = false;

    catch (Exception e)
    e.printStackTrace();
    console.nextLine();
    finally
    if (hoursNotOk)
    System.out.println(", please re-enter the hours again:");

    else
    System.out.println("**hours input accepted**");



    while (hoursNotOk);

    return hours;






    share|improve this answer






















    • If I just put this in the main method while(true) someVar = console.nextInt(); why would it not need console.nextLine()?
      – Nigel Ng
      Nov 11 at 12:59










    • @NigelNg If I try that it either works when I enter a number or throws an exception when I enter a character.
      – Mark
      Nov 11 at 15:34













    up vote
    2
    down vote










    up vote
    2
    down vote









    Because nextInt() only reads the number, and not the n appended after you hit return, you need to clear that before you can read a number again, in this example I do nextLine() in the catch block. here's more indepth explanation



    Working example:



    public static int getHours() 
    int hours = 0;
    boolean hoursNotOk = true;

    do
    try
    System.out.println("Here");
    hours = console.nextInt();
    hoursNotOk = false;

    catch (Exception e)
    e.printStackTrace();
    console.nextLine();
    finally
    if (hoursNotOk)
    System.out.println(", please re-enter the hours again:");

    else
    System.out.println("**hours input accepted**");



    while (hoursNotOk);

    return hours;






    share|improve this answer














    Because nextInt() only reads the number, and not the n appended after you hit return, you need to clear that before you can read a number again, in this example I do nextLine() in the catch block. here's more indepth explanation



    Working example:



    public static int getHours() 
    int hours = 0;
    boolean hoursNotOk = true;

    do
    try
    System.out.println("Here");
    hours = console.nextInt();
    hoursNotOk = false;

    catch (Exception e)
    e.printStackTrace();
    console.nextLine();
    finally
    if (hoursNotOk)
    System.out.println(", please re-enter the hours again:");

    else
    System.out.println("**hours input accepted**");



    while (hoursNotOk);

    return hours;







    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited Nov 11 at 12:23

























    answered Nov 11 at 12:16









    Mark

    2,6961722




    2,6961722











    • If I just put this in the main method while(true) someVar = console.nextInt(); why would it not need console.nextLine()?
      – Nigel Ng
      Nov 11 at 12:59










    • @NigelNg If I try that it either works when I enter a number or throws an exception when I enter a character.
      – Mark
      Nov 11 at 15:34

















    • If I just put this in the main method while(true) someVar = console.nextInt(); why would it not need console.nextLine()?
      – Nigel Ng
      Nov 11 at 12:59










    • @NigelNg If I try that it either works when I enter a number or throws an exception when I enter a character.
      – Mark
      Nov 11 at 15:34
















    If I just put this in the main method while(true) someVar = console.nextInt(); why would it not need console.nextLine()?
    – Nigel Ng
    Nov 11 at 12:59




    If I just put this in the main method while(true) someVar = console.nextInt(); why would it not need console.nextLine()?
    – Nigel Ng
    Nov 11 at 12:59












    @NigelNg If I try that it either works when I enter a number or throws an exception when I enter a character.
    – Mark
    Nov 11 at 15:34





    @NigelNg If I try that it either works when I enter a number or throws an exception when I enter a character.
    – Mark
    Nov 11 at 15:34













    up vote
    1
    down vote













    A simpler approach is to test whether you can read an int before throwing an exception. In any case, you need to discard the current word or line before trying again.



    public static int getHours() 
    while (true)
    if (console.hasNextInt())
    System.out.print("**hours input accepted**");
    return console.nextInt();

    console.nextLine(); // discard the line and try again
    System.out.print(", please re-enter the hours again:");







    share|improve this answer
























      up vote
      1
      down vote













      A simpler approach is to test whether you can read an int before throwing an exception. In any case, you need to discard the current word or line before trying again.



      public static int getHours() 
      while (true)
      if (console.hasNextInt())
      System.out.print("**hours input accepted**");
      return console.nextInt();

      console.nextLine(); // discard the line and try again
      System.out.print(", please re-enter the hours again:");







      share|improve this answer






















        up vote
        1
        down vote










        up vote
        1
        down vote









        A simpler approach is to test whether you can read an int before throwing an exception. In any case, you need to discard the current word or line before trying again.



        public static int getHours() 
        while (true)
        if (console.hasNextInt())
        System.out.print("**hours input accepted**");
        return console.nextInt();

        console.nextLine(); // discard the line and try again
        System.out.print(", please re-enter the hours again:");







        share|improve this answer












        A simpler approach is to test whether you can read an int before throwing an exception. In any case, you need to discard the current word or line before trying again.



        public static int getHours() 
        while (true)
        if (console.hasNextInt())
        System.out.print("**hours input accepted**");
        return console.nextInt();

        console.nextLine(); // discard the line and try again
        System.out.print(", please re-enter the hours again:");








        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 11 at 12:48









        Peter Lawrey

        438k55556952




        438k55556952



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53248559%2fnextint-method-of-scanner-class-does-not-ask-me-for-input-again-in-while-loop%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Top Tejano songwriter Luis Silva dead of heart attack at 64

            政党

            天津地下鉄3号線