Ram nishanth
Ram nishanth

Reputation: 49

Why doesn't the scanner class recognize the other numbers?

public class Hello {

    public static void main(String [] args){

        int number, count = 0, sum = 0;
        int Largest= 0, largestEvenNumber = 0;

        Scanner console = new Scanner(System.in);

        number = console.nextInt(); // read an integer entered by a user

        if (number > Largest) { // Condition for computing the largest number
                Largest = number;
        }

        if (number < 0) { // Condition for computing the number of negative integers in the sequence
                count = count + 1;
        }

        if (number % 2 == 0) { // Condition for computing the largest even integer in the sequence

            if (largestEvenNumber < number) {
                largestEvenNumber = number;
            }
        }

        if (number % 3 == 0) { // Condition for computing the sum of numbers divisible by 3
            sum += number;
        }

        System.out.println("\nThe largest integer is " + Largest);
        System.out.println("The number of negative integers in the sequence is " + count);
        System.out.println("The largest even integer in the sequence is " + largestEvenNumber);
        System.out.printf("The sum of numbers divisible by 3 is %d", sum);

    }

}

I would like to get the expected output given below. But, the Scanner class is reading only the first number. How do I correct this without creating multiple objects?

Output:
 2
-1
-5
-3
 9
 8
 0
The largest integer is 2
The number of negative integers in the sequence is 0
The largest even integer in the sequence is 2
The sum of numbers divisible by 3 is 0
Process finished with exit code 0

expected Output:

The largest integer is 9 The number of negative integers in the sequence is 3 The largest even integer in the sequence is 8 The sum of numbers divisible by 3 is 6

Thank you!

Upvotes: 2

Views: 137

Answers (5)

haoyu wang
haoyu wang

Reputation: 1377

If you want to type all number at once ,you should set a terminal number. when you input all you number,you shoud add the terminal number to indicate input is over.
For example:

public static void main(String [] args){

        int number, count = 0, sum = 0;
        int Largest= 0, largestEvenNumber = 0;

        Scanner console = new Scanner(System.in);
        
        int endNumber = -1; //set the terminal number
        
        do {
            number = console.nextInt(); // read an integer entered by a user

            if (number > Largest) { // Condition for computing the largest number
                Largest = number;
            }

            if (number < 0) { // Condition for computing the number of negative integers in the sequence
                count = count + 1;
            }

            if (number % 2 == 0) { // Condition for computing the largest even integer in the sequence

                if (largestEvenNumber < number) {
                    largestEvenNumber = number;
                }
            }

            if (number % 3 == 0) { // Condition for computing the sum of numbers divisible by 3
                sum += number;
            }
        }while (number!=endNumber);

        System.out.println("\nThe largest integer is " + Largest);
        System.out.println("The number of negative integers in the sequence is " + count);
        System.out.println("The largest even integer in the sequence is " + largestEvenNumber);
        System.out.printf("The sum of numbers divisible by 3 is %d", sum);

    }

Upvotes: 1

erwoods89
erwoods89

Reputation: 43

The line if code is only being executed once. Thus, the Scanner is only taking in the first in put. Use a while loop to take in multiple inputs.

Upvotes: 0

Hossein
Hossein

Reputation: 36


1- You must first receive the data from the user and then calculate it and generate the output.
You can do this using the arrays and after finishing put your data, calculate on them.
for example :

private static final int DATA_SIZE = 5;

  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    ArrayList<Integer> data = new ArrayList<>();
    // put data in array
    while (data.size() == DATA_SIZE){
      data.add(scanner.nextInt());
    }

    // calculate data from array ...
  }

2- When you call a field like nextInt() Scanner class , it is done only once, then you put it in a loop to be repeated several times ...

Of course, I have other suggestions for doing this For example, you can use the array available in the main method (with knowledge, of course)

OR

First ask the user for the amount of data you have, then take it and then calculate
OR....

Upvotes: 1

JustAnotherDeveloper
JustAnotherDeveloper

Reputation: 2256

You are only reading input once. I don't see a loop in your code, so number = console.nextInt(); only runs once. What you should do is put it inside a loop, exit the loop when you have all the numbers (how you check that can be done in multiple ways), and while you're inside the loop put whatever input you receive into an array or another data structure. After you're done collecting input, do your checks over all the numbers on your data structure.

Upvotes: 1

Mureinik
Mureinik

Reputation: 311163

You only call console.nextInt() once, so only one number is read. If you want to call you need to loop over calls to console.hasNext(). Since you're using System.in. E.g.:

while (console.hasNextInt()) {
    number = console.nextInt();

    // calculations
}

Upvotes: 2

Related Questions