Issue
I have a Java program that should be doing what the above title describes. Unfortunately, I am now having the issue of having nothing but zeros and a Error message no matter what I input into Scanner.
The code:
public static void main(String[] args) {
//Set variable
int count = 0;
int numInput = 0;
int arrSize = 10;
//Set and initialize string
int[] numArray = new int[arrSize];
//Set and initialize Scanner
Scanner sc = new Scanner(System.in);
System.out.println("Please input some numbers. Stop by typing -1:");
while (numInput != -1) {
numInput = sc.nextInt();
//Check if input is integer or not
if (numInput == (int)numInput) {
if (count == -1) {
count = numArray.length - 1;
} else if (count == numArray.length) {
//Append input to array
numArray[count] = numInput;
count++;
}//End of conditional
} else {
//Error message
System.out.println("Enter a valid integer:");
}//End of conditional
}//End of while loop
//Print array with for loop
for (int i = 0; i <= 10; i++) {
System.out.print(numArray[i] + " ");
}//End of for loop
System.out.println("\n");
sc.close();
}// End of main
The output:
0 0 0 0 0 0 0 0 0 0 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 10 at last10.main(last10.java:42)
Solution
Like Namandeep_Kaur comment said, your for loop condition is incorrect. You want it to be i < 10
and not i <= 10
because your numArray length is set to 10, however array index is zero-based in Java. So, you will access elements starting with index 0. numArray will have elements at indexes 0-9. Essentially your loop will want to stop when i
is equal to 10 because then the condition 10 < 10
is false and you will not try to be accessing the element at numArray[10]
which does not exist. Also I have re-factored your program.
import java.util.Scanner;
import java.util.InputMismatchException;
public class LimboProgram {
public static void main(String[] args) {
//Set variable
int count = 0;
int numInput = 0;
int arrSize = 10;
//Set and initialize string
int[] numArray = new int[arrSize];
//Set and initialize Scanner
Scanner sc = new Scanner(System.in);
System.out.println("Please input some numbers. Stop by typing -1:");
while (numInput != -1) {
try
{
// you do not need to check if numInput is a number because
// sc.nextInt() will throw an error if the input is not a number.
numInput = sc.nextInt();
if ( numInput == -1 ) {
break;
}
// You can achieve a circular rotation using the modulo (%) operator.
// So, if count becomes 10, then 10 % 10 results in 0. If count is 11,
// then 11 % 10 results in 1. This allows you to "circle" the array.
count = count % numArray.length;
numArray[count] = numInput;
count++;
}
catch (InputMismatchException e) {
System.out.println(e);
}
}
for (int i = 0; i < 10; i++) {
System.out.print(numArray[i] + " ");
}
System.out.println("\n");
sc.close();
}
}
I hope this is the result you were looking for in your program. If there's anything I can clarify further I would be happy to.
Answered By - alonealgorithm
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.