简体   繁体   中英

Validate User Input in a While Loop

I am trying to validate the the user input, but I can't get it to work.

The user has to enter an amount of Revenue between 0-20,000, but not anything more than that.

In addition, the user must enter expenses between 1500-10000, but not anything more than that or less than that.

I also am trying to loop the code as well. I am asking the user if they have additional records they want to enter in or not, and I am counting how many times the record has been done.

Can anyone tell me what I am doing wrong and point me in the right direction?

Here is what I have so far:

import javax.swing.JOptionPane;
import java.io.*;          // Access System.out
import java.util.Scanner;

public class RevenueScan
{
   public static void main(String[] args)
   {
      // Declarations
      Scanner in = new Scanner(System.in);
      int productNumber;
      float revenue;
      float expenses;
      double finalValue;
      char repeat;
      int counter = 0;
      String input;
      Scanner keyboard = new Scanner(System.in);

      // Do Loop to run    
      do
      {
         // Pop up to advise the user the conditions that have to be met for inputs
         System.out.println("Please ensure that your revenue is between 0 to 20,000.00 dollars."
                            + "\nPlease ensure that your expenses are between 1,500.000 to 10,000.00 dollars.");

         // Pop up to ask the user the values of the variables
         System.out.println("Enter in a Product Number (or-1 to END)"
                            + "\nEnter the Revenue"
                            + "\nEnter the Expenses");
         // Read in values  

         productNumber = in.nextInt();
         revenue = in.nextFloat();
         expenses = in.nextFloat();
         //States the values entered by user
         while (revenue < 0 || revenue > 20000 || expenses < 1500 || expenses > 10000);
         {
            System.out.println("You have entered in either an invalid revenue or expense. Please enter in valid numbers.");
            {
               System.out.println("Here is the product number you entered: " + productNumber + "."
                                  + "\nHere is the revenue you entered: " + revenue + "."
                                  + "\nHere are the expenses you entered: " + expenses + ".");
               counter++;
               //calculates final value
            }
         }
         finalValue = revenue - expenses;
         // Calculates final value and displays as net profit, loss or break even. 
         if (finalValue > 0)
         {
            System.out.println("You made a profit. Your net income is: " + finalValue);
         }
         else
            if (finalValue == 0)
            {
               System.out.println("You broke even. Your revenue was " + revenue + " your expenses were " + expenses);
            }
            else
               if (finalValue < 0)
               {
                  System.out.println("You have not made any profit. Your net loss is: " + finalValue);
               }
         System.out.println("Number of records: " + counter);
         //validate user input   
         System.out.println("Would you like to input more records?");
         System.out.println("Enter 'Y' for yes or 'N' for no.");
         input = keyboard.nextLine();
         repeat = input.charAt(0);
      }
      while (repeat == 'Y' || repeat == 'y');
      {
      }
   }
}

You have a ; after the while-statement , it shouldn't be there, otherwise the while-loop is empty, as opposed to containing the block following it.

while (revenue < 0 || revenue > 20000 || expenses < 1500 || expenses > 10000)
{
   System.out.println("You have entered in either an invalid revenue or expense. Please enter in valid numbers.");
   {
      System.out.println("Here is the product number you entered: " + productNumber + "."
                         + "\nHere is the revenue you entered: " + revenue + "."
                         + "\nHere are the expenses you entered: " + expenses + ".");
      counter++;
   }
}

But once you fix this, the above block will just keep looping , since none of the values can change inside that loop.

Also, those inner brackets {} are somewhat pointless .

I recommend this:

if (revenue < 0 || revenue > 20000 || expenses < 1500 || expenses > 10000)
{
   System.out.println("You have entered in either an invalid revenue or expense. Please enter in valid numbers.");
   System.out.println("Here is the product number you entered: " + productNumber + "."
                      + "\nHere is the revenue you entered: " + revenue + "."
                      + "\nHere are the expenses you entered: " + expenses + ".");
   counter++;
   continue; // go to the start of the do-while loop
}

Then you also have to change:

char repeat;

to:

char repeat = 'Y';

otherwise it doesn't compile since continue still triggers the condition check, and repeat won't be initialized the first time, and Java doesn't allow this.

If you want to stick to a while-loop , put something like these lines in there:

// tell user to input values again
System.out.println("Enter in a Product Number (or-1 to END)"
                   + "\nEnter the Revenue"
                   + "\nEnter the Expenses");
// read in values
productNumber = in.nextInt();
revenue = in.nextFloat();
expenses = in.nextFloat();

This will allow the user to input new values until the conditions are met.

And the format of a do-while loop is :

do { ... }
while (...);

Not:

do { ... }
while (...) { ... }

So change:

while (repeat == 'Y' || repeat == 'y');
{
}

To:

while (repeat == 'Y' || repeat == 'y');

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM