0

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

用户输入的值来检查变量是 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

4

5 回答 5

0

accnums充满了null价值观。检查它们是否不是null。我想你是从方法NullPointerException中抛出的。search

于 2012-08-23T08:11:23.083 回答
0

如果我正确理解了您的代码,则您有多个帐户具有由帐号标识的关联余额。在这种情况下,我会使用 Map 而不是摆弄数组。

于 2012-08-23T08:19:27.503 回答
0

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

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

于 2012-08-23T08:23:14.270 回答
0

您的代码中的问题没有在您正在搜索的 accnum 中添加任何内容。所以您的 accnum 包含 NULL 值。如果您将 accnum 数组更改为列表/哈希图,则不会出现异常。

于 2012-08-23T08:42:48.683 回答
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.
}

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

理想情况下,您应该使用 ArrayList - 这样您不仅可以使其更高效,而且更具可读性。

于 2012-08-23T17:20:04.153 回答