Java在序列中跳过一个数字

时间:2012-08-27 04:51:18

标签: java arrays methods

这是非常有趣的,我注意到了。在我能够进一步解释它之前,我会展示代码,你会明白我的意思。

这是代码:

public class Qn3 {
    static BigDecimal[] accbal = new BigDecimal[19];
    private static Integer[] accnums = new Integer[19];

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

    }
    public static void addAccount() {

        int i = 0, accno, input, j, check;
        BigDecimal accbala;
        DecimalFormat df = new DecimalFormat("0.00");

        Scanner sc = new Scanner(System.in);
        Scanner in = new Scanner(System.in);
        accnums[1] = new Integer(1);

        while (accnums.length >= count(accnums)) {
            System.out.print("Enter the account number: ");
            while (sc.hasNext("[0-9]{7}")) {
                accno = sc.nextInt();
                System.out.print("Enter account balance: ");
                accbala = in.nextBigDecimal();

                for (j = 0; j < accnums.length; j++) {
                    if (accnums[j] == null)
                        break;
                    else if (accnums[j].equals(accno)) {
                        break;
                    }
                }

                if (j == accnums.length) {
                    System.out.print("No more than 20 accounts can be added.");
                } else if (accnums[j] != null) {
                    if ((accnums[j].equals(accno)))
                        System.out.println("Account already exists");
                    break;
                } else {
                    accnums[j] = accno;
                    accbala = accbala.setScale(2, RoundingMode.HALF_UP);
                    accbal[j] = accbala;
                    check = j;
                    System.out.println("Current number of accounts in the system: "
                                    + (check + 1)
                                    + "\nNumber of accounts still can be added: "
                                    + (20 - (check + 1)));

                }
            }

            while (!sc.hasNext("[0-9]{7}")) {
                System.out.println("Wrong NRIC");
                break;
            }
            while (accnums.length <= count(accnums)) {
                System.out.println("20 accounts have already been created");
                break;
            }
            break;
        }
    }

    private static int count(Integer[] array) {
        int count = 0;
        // accnums = new Integer[] {1,2};
        for (int index = 0; index < array.length; index++) {
            if (array[index] != null) {
                count++;
            }
        }
        // System.out.println("You have used " + count + " slots");
        return count;
    }
}

现在您已经看到了代码中很难注意到的问题,请注意addaccount()方法中的行

 System.out.println("Current number of accounts in the system: "+(check+1)+"\nNumber of accounts still can be added: "+(20 - (check+1)));

这一行第一个check+1将给我1然后下一个给我3!然后下次我运行方法时它给了我4然后再给5等等等等,2发生了什么?

1 个答案:

答案 0 :(得分:2)

你在一个else块中有println,当j == 1时,如果是这样的话,你就会遇到else。尝试删除此行

accnums[1] = new Integer (1);