求更改一下我的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;
}
}
} 展开
//若在,则指出其下标值,若不在,则返回值-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;
}
}
} 展开
4个回答
展开全部
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);
}
}
}
希望采纳!
展开全部
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");
}
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先你这个不是二分查找法,二分查找法的前提是查找一组已经排好序的数组,如果数组元素过多,你这个算法的复杂度就高了
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;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
错误原因:你的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");
}
}
修改后的程序如下:
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");
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询