异常处理修复

时间:2017-06-26 03:07:03

标签: java

我的代码打印“在数组中找不到元素”的次数与在数组中找到该数字所需的次数相同,为什么以及如何解决这个问题。

我的作业:

创建一个Java程序,其方法是在整数数组中搜索指定的整数值(请参阅下面的方法标题的帮助)。如果数组包含指定的整数,则该方法应在数组中返回其索引。如果没有,该方法应该抛出一个Exception,声明“在数组中找不到元素”并优雅地结束。使用您创建的数组并使用“needle”的用户输入来测试main方法。

public static int returnIndex(int [] haystack,int needle){

到目前为止我的代码:

import java.util.Scanner;
public class Assignment1 {

 public static void main(String[] args) {
     int[] haystack = { 4,5,6,7,12,13,15,16,22,66,99,643 };        
     Scanner sc = new Scanner(System.in);
     System.out.println("Enter a number in the array: ");                
     int needle = sc.nextInt();
     returnIndex(haystack,needle);

   }
 public static int returnIndex(int[] haystack, int needle) {
        for (int n = 0; n < haystack.length; n++) {
            if (haystack[n] == needle) 
                return n;
            else 
                System.out.println("Element not found in array");
        }
        return -1;  
    }
 }

我的输出:

Enter a number in the array: 
7
Element not found in array
Element not found in array
Element not found in array

Enter a number in the array: 
15
Element not found in array
Element not found in array
Element not found in array
Element not found in array
Element not found in array
Element not found in array

4 个答案:

答案 0 :(得分:4)

你没有多次获得相同的输出,因为你没有突破循环。如果你在遍历整个数组时元素不在数组中,那么将System.out.println("Element not found in array");移到for循环之外。下面是完整的例子,看看。

用户在代码下面,如果在数组中找不到元素,我将打破循环。

public class SOTest {
    public static void main(String[] args) {
        int[] haystack = { 4, 5, 6, 7, 12, 13, 15, 16, 22, 66, 99, 643 };
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter a number in the array: ");
        int needle = sc.nextInt();
        int index = returnIndex(haystack, needle);
        if(index!=-1) // print index only if element is in array.
        System.out.println("Element found at index : " + index);

    }

    public static int returnIndex(int[] haystack, int needle) {
        for (int n = 0; n < haystack.length; n++) {
            if (haystack[n] == needle)
                return n;
        }
        System.out.println("Element not found in array");
        return -1;

    }
}

编辑: - 添加了可运行代码和示例输入和输出,以验证程序的正确性。还添加了在数组中找到元素时打印索引的逻辑,-1索引表示元素不在数组中。

数字的输入和输出: - 120,数组中没有。

Enter a number in the array: 
120
Element not found in array

对于数组中的数字5,输出将为bbelow: -

Enter a number in the array: 
5
Element found at index : 1

答案 1 :(得分:2)

您需要将打印线放在循环外:

public static int returnIndex(int[] haystack, int needle) {
        for (int n = 0; n < haystack.length; n++) {
            if (haystack[n] == needle) 
                return n;
        }

        System.out.println("Element not found in array");
        return -1;  
 }

因为如果你得到了元素并用return n;返回它,那么下面的部分就不会被执行了。将它放在循环中会使它为每个与您要查找的元素不匹配的元素打印未找到的文本。

更好的解决方案是在方法之外打印元素,如下所示:

public static int returnIndex(int[] haystack, int needle) {
     for (int n = 0; n < haystack.length; n++) {
        if (haystack[n] == needle) 
            return n;
     }
     return -1;  
}

public static void main(String[] args) {
     ...              
     int needle = sc.nextInt();
     if (returnIndex(haystack,needle) == -1){
           System.out.println("Element not found in array");
     }
     else {
           System.out.println("Element found in array");
     }
}

答案 2 :(得分:0)

尝试将System.out置于返回-1之上,这样每次找不到所选数字时都不会打印“数组中找不到元素”。

答案 3 :(得分:0)

试试这个

  

只需进行小改变在returnIndex函数中它将适合你

public static int returnIndex(int[] haystack, int needle) {
    for (int n = 0; n < haystack.length; n++) {
        if (haystack[n] == needle) {
            return n;
        } else {
            if(n == haystack.length - 1)
            System.out.println("Element not found in array");
        }
    }
    return -1;
}