Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
错误处理(Java)_Java_Arrays_Exception_Error Handling - Fatal编程技术网

错误处理(Java)

错误处理(Java),java,arrays,exception,error-handling,Java,Arrays,Exception,Error Handling,这是一个相当简单的问题,但我基本上得到了要调试的代码,除了一个错误之外,我已经修复了所有错误。当试图使程序更友好并包含错误处理时,我发现即使满足条件(即用户搜索的数组中的数字实际上存在于数组中),也会抛出错误消息。不是寻找直接的答案,只是一个暗示。我尝试过使用if/else的组合,也尝试过使用花括号 Scanner input = new Scanner(System.in); System.out.println("Enter an integer to find: ");

这是一个相当简单的问题,但我基本上得到了要调试的代码,除了一个错误之外,我已经修复了所有错误。当试图使程序更友好并包含错误处理时,我发现即使满足条件(即用户搜索的数组中的数字实际上存在于数组中),也会抛出错误消息。不是寻找直接的答案,只是一个暗示。我尝试过使用if/else的组合,也尝试过使用花括号

    Scanner input = new Scanner(System.in);
    System.out.println("Enter an integer to find: ");

    try {
        int number = input.nextInt();
        int index = Arrays.binarySearch(array, number);

        for (int i = 0; i < array.length; i++) {
               if ( array[i] == number )
                   System.out.println("Found " + number + " at index " + index++);
       }
            System.out.printf("Your number was not found within the array.");
    }
    catch (InputMismatchException e){
            System.out.printf("Sorry, but it looks like you entered something other than an integer. Please try again.");   
    }
}
在索引0处找到-9
在数组中找不到您的号码

如果找到值,将返回索引,否则将返回-1

如果
索引==-1
,则可以打印“未找到消息”,而无需进入循环

否则,如果
index>0
,则可以进入循环并在数组上迭代以查找值匹配的每个索引

如果您想要多个匹配项的消息,这是必需的,因为binarySearch将只返回找到该值的第一个索引

另一方面,binarySearch要求首先对数组进行排序,否则结果将是未定义的。我不知道这是否是一个问题,因为数组是在示例之外声明的

Scanner input = new Scanner(System.in);
System.out.println("Enter an integer to find: ");

try {
    int number = input.nextInt();
    int index = Arrays.binarySearch(array, number);

    if (index > 0) {
        for (int i = 0; i < array.length; i++) {
           if ( array[i] == number ) {
               System.out.println("Found " + number + " at index " + i);
           }
        }
    } else {
        System.out.printf("Sorry, your number wasn't found.");   
    }
}
catch (InputMismatchException e) {
    System.out.printf("Sorry, but it looks like you entered something other than an integer. Please try again.");  
}
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入要查找的整数:”);
试一试{
int number=input.nextInt();
int index=Arrays.binarySearch(数组,数字);
如果(索引>0){
for(int i=0;i
如果找到值,将返回索引,否则将返回-1

如果
索引==-1
,则可以打印“未找到消息”,而无需进入循环

否则,如果
index>0
,则可以进入循环并在数组上迭代以查找值匹配的每个索引

如果您想要多个匹配项的消息,这是必需的,因为binarySearch将只返回找到该值的第一个索引

另一方面,binarySearch要求首先对数组进行排序,否则结果将是未定义的。我不知道这是否是一个问题,因为数组是在示例之外声明的

Scanner input = new Scanner(System.in);
System.out.println("Enter an integer to find: ");

try {
    int number = input.nextInt();
    int index = Arrays.binarySearch(array, number);

    if (index > 0) {
        for (int i = 0; i < array.length; i++) {
           if ( array[i] == number ) {
               System.out.println("Found " + number + " at index " + i);
           }
        }
    } else {
        System.out.printf("Sorry, your number wasn't found.");   
    }
}
catch (InputMismatchException e) {
    System.out.printf("Sorry, but it looks like you entered something other than an integer. Please try again.");  
}
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入要查找的整数:”);
试一试{
int number=input.nextInt();
int index=Arrays.binarySearch(数组,数字);
如果(索引>0){
for(int i=0;i
循环内的条件错误。如果数组的第一个元素不是您要查找的值,它将立即终止。错误处理必须在循环之后进行。试试这个:

 boolean found = false;
    for (int i = 0; i < array.length; i++) {
        if ( array[i] == number ){
            System.out.println("Found " + number + " at index " + index++);
            found = true;}
    }
    if(!found)
        throw new IllegalArgumentException("Your number was not found within the array.");
boolean-found=false;
for(int i=0;i
循环内的条件错误。如果数组的第一个元素不是您要查找的值,它将立即终止。错误处理必须在循环之后进行。试试这个:

 boolean found = false;
    for (int i = 0; i < array.length; i++) {
        if ( array[i] == number ){
            System.out.println("Found " + number + " at index " + index++);
            found = true;}
    }
    if(!found)
        throw new IllegalArgumentException("Your number was not found within the array.");
boolean-found=false;
for(int i=0;i
在您的代码中:
“在数组中找不到您的号码。”将始终打印,除非catch块捕获到异常

关于二进制搜索还有一件有趣的事情:
如果数组中不存在元素,则如果搜索的元素“本应”存在,则返回可能位置的负值。

示例:在此程序中,如果搜索9,它将返回-3
如果搜索65,它将返回-6

这将正常工作:

import java.util.Arrays;
import java.util.InputMismatchException;
import java.util.Scanner;

public class debug {
public static void main(String...args){

     Scanner input = new Scanner(System.in);
        System.out.println("Enter an integer to find: ");
        int i, array[]={-9,8,14,56,64};
        try {
            int number = input.nextInt();
            int index = Arrays.binarySearch(array, number);

            if(index>=0)
            System.out.println("Found " + number + " using binary search at index " + index);
            else
                System.out.println("Not Found !! index returned by binary search is : "+index);

            boolean flag=false;
            for (i = 0; i < array.length; i++) {
                   if ( array[i] == number ){
                       flag=true;
                       break;
                   }
           }
            if(flag)
                System.out.println("Found " + number + " using for loop at index " + i);
            else
          System.out.printf("Your number was not found within the array.");
        }
        catch (InputMismatchException e){
                System.out.printf("Sorry, but it looks like you entered something other than an integer. Please try again.");   
        }
    }

}
导入java.util.array;
导入java.util.InputMismatchException;
导入java.util.Scanner;
公共类调试{
公共静态void main(字符串…参数){
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入要查找的整数:”);
int i,数组[]={-9,8,14,56,64};
试一试{
int number=input.nextInt();
int index=Arrays.binarySearch(数组,数字);
如果(索引>=0)
System.out.println(“在索引“+索引”处使用二进制搜索找到“+数字+”);
其他的
System.out.println(“未找到!!二进制搜索返回的索引为:“+index”);
布尔标志=假;
对于(i=0;i