小弟今天写了个小程序,但是运行的时候总出错,好像只能把第一个for循环完成,然后就报错了,想了半天也没明白,麻烦哪位指点一二,万分感谢!
import java.io.*;
public class Bsearch {
public static void main(String[] args) throws NumberFormatException, IOException  {
int size = 3;
int[] arr = new int[size];
System.out.println("请输入的一列数:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for(int i = 0;i<=arr.length;i++)
{
    int change = Integer.parseInt(br.readLine());
    arr[i]= change;
}
System.out.println("您输入的一组数是:");
for(int i = 0;i<=arr.length;i++)
{
System.out.print(arr[i]);
}
System.out.println("请任输入的一个数:");
int x = Integer.parseInt(br.readLine());
Search sh=new Search();
         int rest,j;
         for(int i = 0; i <arr.length; i++)
   {
  rest = x - arr[i];
  j = sh.search(arr, size, rest);
  if(j == -1) continue;
  else  System.out.println("第"+ i+1 +"个数和"+ "第" + j+1 +"的和是" + x);
  break;
  }
}
}
class Search
{
public int search(int []a,int n,int k)
{
int left = 0;
int right = n;
while(left<=right)
{
int middle=(left+right)/2;
if(k==a[middle])
return middle;
else if(k <= a[middle])
{
right = middle-1;
}
else
{
left=middle-1;
}
}
return -1;
}
}

解决方案 »

  1.   

    所有的循环
    for(int i = 0;i<=arr.length;i++)
    都写错了,这样会越界的,应该是:
    for(int i = 0;i<arr.length;i++)
    话说一楼的,你这样:
    Scanner sc = new Scanner(System.in);
    然后你看看Scanner的API就知道了。
      

  2.   

    for(int i = 0;i<=arr.length;i++)

    int change = Integer.parseInt(br.readLine());
    arr[i]= change;//i=arr.length时出异常
    }
    System.out.println("您输入的一组数是:");
    for(int i = 0;i<=arr.length;i++)

    System.out.print(arr[i]);//i=arr.length时出异常
    }
      

  3.   

    循环时 从0 开始 条件为 <length 切记不能加= 
    特殊情况如, 从1开始 条件为<length -1  等等
      

  4.   

    for(int i = 0;i<arr.length;i++)
      

  5.   

    for(int i = 0;i<arr.length;i++)
      

  6.   

    数组或者字符串或者集合的index都是从0开始的 
      

  7.   

    一楼,
    就我现在的水平,可以有两种方法,一是用scanner类, 
          Scanner sc = new Scanner(System.in);
         int i = sc.nextInt();//转化成int类型
    二是使用输入输出流
         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
         int x = Integer.parseInt(br.readLine());//将输入的数转化成int类型
      这样从控制台输入的默认为字符串类型的,需要转化成想要的类型。