2017-04-21 68 views
-1

我有一个方法提示用户输入整数,并使输入的字符串数组的长度。该问题似乎是迭代数组时...如果我输入3作为“numofstud”,它将只存储两个值。我试着添加for (int i = 0; i < nameArray.length + 1; i++),但只给了我一个ArrayIndexOutOfBounds错误...重复数组java

有人可以告诉我,当我迭代数组时,我的错误是什么。 感谢

void userInput(){ 
    Scanner s = new Scanner(System.in); 
    System.out.println("Please enter the number of students: "); 

    while(!s.hasNextInt()){ 
     s.next(); 
    } numofstud = s.nextInt(); 

    String nameArray[] = new String[numofstud]; 

    for(int i = 0; i < nameArray.length ; ++i){ 
     System.out.println("Please enter the student's name: "); 
     while(!s.hasNext("[a-zA-Z]+")){ 
      s.next(); 
     } 
     nameArray[i] = s.nextLine(); 
    } 

} 
+0

你怎么知道它只存储两个值?它会提示你三次吗?你有没有示例输入/输出? – lucasvw

+0

[Scanner在使用next(),nextInt()或其他nextFoo()方法之后跳过nextLine()的可能副本(http://stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after-使用-下一nextint - 或其它-nextfoo) –

回答

0

你有两个问题:

  1. 你有你读INT后清除您的扫描仪
  2. 你的循环应该从0nameArray-1,因为你已经与初始化数组String nameArray[] = new String[numofstud];

尝试用此代替:

Scanner s = new Scanner(System.in); 
System.out.println("Please enter the number of students: "); 

//  while (!s.hasNextInt()) { 
//   s.next(); 
//  } 
int numofstud = s.nextInt(); 
s.nextLine();//<<------------Clear your Scanner 

String nameArray[] = new String[numofstud]; 

//Loop from i = 0 to to i < nameArray.length 
for (int i = 0; i < nameArray.length; i++) { 
    System.out.println("Please enter the student's name: "); 
    while (!s.hasNext("[a-zA-Z]+")) { 
     s.next(); 
    } 
    nameArray[i] = s.nextLine(); 
}