一步一回首. 2024-04-14 15:07 采纳率: 0%
浏览 4

二分查找Javapta

img

img

img

import java.util.Scanner;
public class 矩阵{
    public static void main(String args[]){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[] a=new int[n];
        int i=0;
        for(;i<n;i++){
            a[i]=sc.nextInt();
        }
        int p=sc.nextInt();
        int low=0;
        int high=a.length;
        while(low<=high){
            int mid=(low+high)/2;
            if(p<a[mid]){
                high=mid-1;
            }else if(p>a[mid]){
                low=mid+1;
            }else if(p==a[mid]){
                System.out.print("It's position is "+mid+"!");
            }
        }
            System.out.print("No data!");

    }
}

应该怎么改?

  • 写回答

4条回答 默认 最新

  • Kwan的解忧杂货铺 2024-04-14 15:07
    关注

    下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    提问:这段 Java 代码中的二分查找有什么问题?应该怎么修改?

    import java.util.Scanner;
    
    public class 矩阵{
        public static void main(String args[]){
            Scanner sc=new Scanner(System.in);
            int n=sc.nextInt();
            int[] a=new int[n];
            int i=0;
            for(;i<n;i++){
                a[i]=sc.nextInt();
            }
            int p=sc.nextInt();
            int low=0;
            int high=a.length;
            while(low<=high){
                int mid=(low+high)/2;
                if(p<a[mid]){
                    high=mid-1;
                }else if(p>a[mid]){
                    low=mid+1;
                }else if(p==a[mid]){
                    System.out.print("It's position is "+mid+"!");
                }
            }
            System.out.print("No data!");
    
        }
    }
    

    回答:

    问题:如果输入的数不在数组中,则输出 "No data!" 语句将在多次循环后输出,而不是在判断完所有可能的情况后输出。

    解决方案:

    1. 将 "No data!" 语句直接放在 while 循环后。

    2. 在 while 循环后添加一个 if 判断,判断是否找到了数,如果没有找到,输出 "No data!"。

    修改后的代码:

    import java.util.Scanner;
    
    public class 矩阵{
        public static void main(String args[]){
            Scanner sc=new Scanner(System.in);
            int n=sc.nextInt();
            int[] a=new int[n];
            int i=0;
            for(;i<n;i++){
                a[i]=sc.nextInt();
            }
            int p=sc.nextInt();
            int low=0;
            int high=a.length;
            while(low<=high){
                int mid=(low+high)/2;
                if(p<a[mid]){
                    high=mid-1;
                }else if(p>a[mid]){
                    low=mid+1;
                }else if(p==a[mid]){
                    System.out.print("It's position is "+mid+"!");
                    return;
                }
            }
            System.out.print("No data!");
        }
    }
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月14日

悬赏问题

  • ¥99 利用C/C++语言,使用TCP/IP协议,编一个简易聊天程序
  • ¥15 如何使用python 实现对串口/dev/ttyUSB0进行上锁,使得该串口只能在一个python脚本中使用,其他脚本不能操作这个串口
  • ¥15 晶体塑性有限元——Damask求解
  • ¥15 写出这个有没有人能写一下今天中午就要
  • ¥30 设计一个图形用户界面来控制你机械臂的运动
  • ¥30 3d打印机无法识别到SD卡,如何解决?(相关搜索:格式化)
  • ¥15 RPG游戏架构设计和开发方法
  • ¥15 前端返回pdf时不显示内容
  • ¥50 如何在不能联网影子模式下的电脑解决usb锁
  • ¥20 服务器redhat5.8网络问题