Java搜索是否存在字符串

时间:2012-08-23 08:08:27

标签: java arrays search

我正在尝试确定用户输入的值是否已存在于当前数组中,该怎么做?

用户输入的值来检查变量是 accno ,要比较的数组是 accnums

这就是我目前的工作

public class Randomtopic {

    static BigDecimal[] accbal = new BigDecimal[20];
    static Integer[] accnums = new Integer[20];

    public static void main(String[] args) {
        displayMenu();
    }

    public static void displayMenu() {
        int option, accno;
        double accbal;
        Scanner sc = new Scanner(System.in);
        System.out.println(" Add an account");
        System.out.println("Search an account with the given account number");
        System.out.print("Enter Your Choice: ");
        option = sc.nextInt();
        switch (option) {
            case 1:
                System.out.println("You have choosen to add account");
                addAccount();
                break;
            case 2:
                System.out.println("You have choosen to search for an account");
                System.out.print("Enter the Account Number: ");
                accno = sc.nextInt();
                System.out.println(search(accno, accnums));
                break;
            default:
                System.out.println("Please choose an appropriate option as displayed");
        }
        displayMenu();
    }

    public static void addAccount() {
        //String accno;
        int i = 0;
        int accno, input;
        BigDecimal accbala;
        DecimalFormat df = new DecimalFormat("0.00");
        //BigDecimal[] accbal= new BigDecimal[20];
        Scanner sc = new Scanner(System.in);
        //String[] accnums = new String[20];
        int j;
        System.out.print("Enter the account number: ");
        accno = sc.nextInt();
        if (String.valueOf(accno).matches("[0-9]{7}")) {
            System.out.print("Enter account balance: ");
            accbala = sc.nextBigDecimal();
            for (j = 0; j < accnums.length; j++) {
                if (accnums[j] == null )
             break;
         else if(accnums[j].equals(accno))
         {
              System.out.println("Account already exists");
         }
            }
            //System.out.print(j);
            if (j == accnums.length) {
                System.out.print("Account storage limit has reached.");

            } else {

                    accnums[j] = accno;
                    accbala = accbala.setScale(2, RoundingMode.HALF_UP);
                    accbal[j] = accbala;

            }
            input = accnums[0];
            System.out.println("The value: " + input + " witha a balance of " + accbal[0].toString());
        } else {
            System.out.println("Wrong NRIC");
        }
        displayMenu();
    }

    public static String search(int accnum, Integer[] numbers) {
        // Integer[] numbers;
        //int key;
        //numbers = accnums;
        // System.out.print("Enter the Account Number: ");        
        for (int index = 0; index < numbers.length; index++) {
            if (numbers[index].equals(accnum)) {
                return String.valueOf(index);
                // System.out.println("The account number exists in this array index :"+index);//We found it!!!
            }
            break;
        }
        return "-1";
    }
}

所以我的问题? 当我第一次进入accnum本身时,我得到NullPointerException。 TKS

5 个答案:

答案 0 :(得分:0)

您的accnums已填充null个值。检查它们是否不是null。我认为您的NullPointerException方法会引发search

答案 1 :(得分:0)

如果我正确理解了您的代码,您就会拥有一些帐户,其帐户编号标识了相关的余额。在这种情况下,我会使用Map而不是摆弄数组。

答案 2 :(得分:0)

当您第一次运行方法搜索时,您的数组accnums将填充空值,因此当您调用行if ( numbers[index].equals(accnum))时,您正在尝试对null对象调用wait方法

您可以做的是将accnums从数组更改为列表,然后大小将取决于数字元素,因此它不会像数组一样具有固定大小

答案 3 :(得分:0)

您的代码中没有添加任何东西的代码中的问题。您的accnum包含NULL值。如果您将accnum数组更改为list / hashmap,则不会出现异常。

答案 4 :(得分:0)

实例化或创建数组时,默认情况下将值设置为null;每当迭代一个可能为空值的数组时,都需要跳过这些值。例如,

for(loop conditions)
        if (numbers[index] != null && (numbers[index].equals(accnum))) {
            return String.valueOf(index);
            //your text goes here;
        }
        break;//I suggest you take this line out of your original code. Your for loop will end this once you have iterated through the entire array, or you will automatically break out if you find the value.
}

如果必须使用数组,那么这是迭代它的最佳方法。括号和&amp;&amp;在if子句中阻止你执行.equals检查number [index]的值是否为= - 反过来,防止抛出null错误。您唯一的选择是将数字[]中的每个值设置为0或其他值,而不是在迭代时跳过该值。这将通过静态final int来完成。但是,这不是理想的编码。

理想情况下,您应该使用ArrayList - 您不仅可以提高效率,还可以提高可读性。