求更改一下我的Java小程序,并帮忙分析我错的原因,谢谢!

//二分检索,已知数组a中的n个整数,按从小到大顺序排列,检索一个数是否在a中,//若在,则指出其下标值,若不在,则返回值-1。//例如数组{1,2,7,64,165,2... //二分检索,已知数组a中的n个整数,按从小到大顺序排列,检索一个数是否在a中,
//若在,则指出其下标值,若不在,则返回值-1。
//例如数组{1,2,7,64,165,271},若输入64,则返回其下标3;若输入70,则返回-1。
import java.util.Scanner;
import java.io.*;
public class ex12
{
public static void main(String args[])
{
int a[]={1,2,7,64,165,271};
System.out.println("please input a number:");
Scanner s=new Scanner(System.in);
int x=s.nextInt();
for(int i=0;i<6;i++)
{
if(a[i]==x)
System.out.println(i);
else
System.out.println("-1");
break;
}
}
}
展开
 我来答
ahcc08
2014-04-25 · 知道合伙人软件行家
ahcc08
知道合伙人软件行家
采纳数:11853 获赞数:51935
拥有丰富的软件开发经验。

向TA提问 私信TA
展开全部
import java.util.Scanner;
public class ex12
{
 public static void main(String args[])
 {
      int a[]={1,2,7,64,165,271};
      System.out.println("please input a number:");
      Scanner s=new Scanner(System.in);
      int x=s.nextInt();
      
      boolean bFind = false;
      for(int i=0;i<a.length;i++)
      {
          // 如果找到了,就停止循环
           if(a[i]==x)
           {
               bFind = true;
               System.out.println(i);
               break;
           }
       }
       // 如果没有找到
       if (!bFind )
       {
           System.out.println(-1);
       }
 }
}

希望采纳!

小肥smallfat
2014-04-25 · 超过25用户采纳过TA的回答
知道答主
回答量:69
采纳率:0%
帮助的人:61.4万
展开全部

package test;


import java.util.Scanner;

import java.io.*;


public class ex12 {

public static void main(String args[]) {

int a[] = { 1, 2, 7, 64, 165, 271 };

System.out.println("please input a number:");

Scanner s = new Scanner(System.in);

int x = s.nextInt();

for (int i = 0; i < 6; i++) {

if (a[i] == x){

System.out.println(i);

break;

}

else if(i==a.length-1){

System.out.println("-1");

}

}

}

}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
凌晨的夜夜
2014-04-25 · TA获得超过116个赞
知道答主
回答量:81
采纳率:0%
帮助的人:76.7万
展开全部

首先你这个不是二分查找法,二分查找法的前提是查找一组已经排好序的数组,如果数组元素过多,你这个算法的复杂度就高了

import java.util.Scanner;
public class Test {
public static void main(String[] args) {
//二分查找算法   ,前提:一组已经排好序的数组 
int []array = {3,11,55,77,123,254,667,1111,2231,3333,9999,88121};
Scanner s=new Scanner(System.in);
int findNum = s.nextInt();
int result = findNum(array, findNum);
System.out.println(result);
}

/**
 * 功能:传入一个排好序的数组(从小到大)和一个要查找的数
 * 如果数组中存在这个要找的数,就返回这个数在数组中的角标,否则返回-1
 * @param array
 * @param num
 * @return
 */
public static  int findNum(int[] array,int num){
int start = 0;
int end = array.length-1;
int mid  ;
while(start <= end){
mid = (start+end)/2;
if(num == array[mid]){
return mid;
}else if(num > array[mid]){
start = mid +1;
}else{
end = mid - 1;
}
}
System.out.println("没有找到");
return -1;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
题之恋
推荐于2016-07-17 · 超过21用户采纳过TA的回答
知道答主
回答量:193
采纳率:16%
帮助的人:49.8万
展开全部
错误原因:你的For 循环只执行一次就被break打断了,只有输入第一个数1才能正确打印
修改后的程序如下:
import java.util.Scanner;
import java.io.*;
public class ex12
{
public static void main(String args[])
{
int a[]={1,2,7,64,165,271};
boolean flag = false;
System.out.println("please input a number:");
Scanner s=new Scanner(System.in);
int x=s.nextInt();
for(int i=0;i<6;i++)
{
if(a[i]==x){
System.out.println(i);
flag = true; //标记:找到了
break;
}
}
if(!flag)
System.out.println("-1");
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式