2015-03-31 241 views
0

我是一名具有创建程序的开始程序员,该程序提示用户输入将存储到字符串数组中的元素数量。作业的第二部分是以升序列出数组。但我有点卡住了第一部分。如果用户输入,在输入第三个字符串后会有3个元素,我得到一个超出界限的异常。以下是代码。将字符串输入到数组中

import java.util.*; 
public class arrays 
{ 
    public static void main(String[]arg) 
    { 
     Scanner input = new Scanner(System.in); 
     //Read user input.     
     System.out.print("How many Elements? ");     
     int num = input.nextInt(); 
     String array[]= new String[num];     

     for (int i = 1 ; i <= num; i++)    
     {      
      System.out.print("Enter element "+ i +": "); 
      array[i] = input.next(); 
     } 
     System.out.println(array); 
    } 
} 
+0

你正在使用的语言应该是*标记*,而不是在标题。 – crashmstr 2015-03-31 17:09:04

+0

数组从0开始,所以你的第三个元素应该是数组[2],其中你的第一个元素是[0]。所以你的int我应该从0开始 – 2015-03-31 17:09:58

+0

在索引0开始数组有助于解决fence问题http://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html – 2015-03-31 17:11:22

回答

2

数组索引0启动,这样你的循环应该是这样的:

for (int i = 0 ; i < num; i++)    
{      
    System.out.print("Enter element "+ (i+1) +": "); 
    array[i] = input.next(); 
} 

注意,我也是在System.out.print添加+1显示“用户友好”输出(例如“输入元素1 :“而不是”输入元素0:“为第一个元素)。

另一种办法是减去1同时访问阵列,这将让你保持现有的System.out.print行:

for (int i = 1 ; i <= num; i++)    
{      
    System.out.print("Enter element "+ i +": "); 
    array[i - 1] = input.next(); 
} 

虽然我觉得这是不太常用的做法。

0

数组在Java中的编号从零,这意味着,你的长度为3的数组有这样的有效索引:

array[0] 
array[1] 
array[2] 

我想这是足以让你在正确的轨道上;-)

-1

更改为array[i-1] = input.next();

0

从i = 0开始并上升到i < num,因为在三个数组的示例中,您的数组从0开始并上升到2,因此难怪存在超出范围的异常。这应该可以解决这个错误。

0

您会收到错误消息,因为array索引以0开头。你应该改变你的循环成这样:

for (int i = 0 ; i < num; i++)