小弟今天写了个小程序,但是运行的时候总出错,好像只能把第一个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;
}
}
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;
}
}
for(int i = 0;i<=arr.length;i++)
都写错了,这样会越界的,应该是:
for(int i = 0;i<arr.length;i++)
话说一楼的,你这样:
Scanner sc = new Scanner(System.in);
然后你看看Scanner的API就知道了。
{
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时出异常
}
特殊情况如, 从1开始 条件为<length -1 等等
就我现在的水平,可以有两种方法,一是用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类型
这样从控制台输入的默认为字符串类型的,需要转化成想要的类型。