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