Search code examples
javamethodsboolean-operations

Programming is asking for input twice


I'm having some troubles with the beginning of this program. It's supposed to take a number and determine whether or not it is perfect. Currently I have it asking how many numbers to check, whenever I input any positive number, it asks again. AND, whenever I input a negative number for the second question, the program ends and doesn't prompt again. Any ideas on how to fix this?

import java.util.Scanner;

public class aermel_Perfect
{
public static void main ( String args [] )
{
    int gN = getNum();
    int gP = getPerfect();
}


public static int getNum() //Get amount of numbers to check
{
Scanner input = new Scanner ( System.in );
System.out.print( "How many numbers would you like to test? " );
int count = input.nextInt();
int perfect = 1;
boolean vN = validateNum(count, perfect);
return count;
}   

public static boolean validateNum( int count, int perfect  ) //Check if number is valid
{
if (( count <= 0) || ( perfect <= 0))

{ 
    System.out.print( "Non-positive numbers are not allowed.\n");
}



else 
{
    return true;
}
return false;


}
public static int getPerfect() //Gets the numbers to test
{
Scanner input = new Scanner ( System.in );
int perfect = -1;
int count = getNum();
System.out.print("Please enter a perfect number: " );
perfect = input.nextInt();
boolean vN = validateNum(perfect, count);
return perfect;
}
}

Solution

  • Use a while loop in your get methods e.g. to repeatedly ask for input until a valid number is entered.

        public static int getNum() //Get amount of numbers to check
        {
          Scanner input = new Scanner ( System.in );
          System.out.print( "How many numbers would you like to test? " );
          int count = input.nextInt();
          int perfect = 1;
          boolean vN = validateNum(count, perfect);
          while(!vN ){
              System.out.println("Invalid input. Try again");
              count = input.nextInt();
              vN = validateNum(count, perfect);
          }
          return count;
        } 
    

    Simiilarly, update the getPerfect method and remove int count = getNum(); statement from this method.

    EDIT: To repeatedly ask for perfect number count times, update your main method as below:

       public static void main ( String args [] )
       {
          int gN = getNum();
          for(int indx=0; indx <gN; indx++){
             int gP = getPerfect();
             //use your gP numbers in the way you want
          }
       }
    

    EDIT1: To call How many numbers would you like to test? " tow times, I think you can simply call your getNum() method two times in the main method as below:

       public static void main ( String args [] )
       {
          int gN = getNum();//first call
          gN = getNum(); //second call
          int gP = getPerfect();
       }