Search code examples
javaloopsarraylistinteger

How to determine when last integer has been entered? Java


I currently have to enter a letter to stop the while loop and print out the number list. Is there a better way to determine when the last int has been entered?

` Scanner scanner = new Scanner(System.in);
            System.out.println("Enter a sequence of integer values" +
                    " to be sent to the server");
            List<Integer> numberList = new ArrayList<Integer>();
            while(scanner.hasNextInt()) {
                numberList.add(scanner.nextInt());
            }
            System.out.println(numberList);
            os.write(String.valueOf(numberList));
            scanner.close();`

Solution

  • Do it as follows:

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    
    public class Program {
    
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.println("Enter a sequence of integer values to be sent to the server (x to terminate)");
            List<Integer> numberList = new ArrayList<Integer>();
            String[] data = scanner.nextLine().split(" ");
            int i = 0;
            while (i < data.length && data[i].matches("\\d+")) {// The regex \d+ matches only integers
                numberList.add(Integer.parseInt(data[i]));
                i++;
            }
            System.out.println(numberList);
        }
    }
    

    A sample run:

    Enter a sequence of integer values to be sent to the server (x to terminate)
    10 20 30 X
    [10, 20, 30]
    

    Also, do not close Scanner for System.in as it also closes System.in as well.