这个布尔数组如何工作?

时间:2016-09-27 00:32:50

标签: java arrays boolean

我不明白这段代码是如何运作的。问题是在给定年份之后的明年找到不同的数字。

public Main(){
    try{
        BufferedReader in;
        in = new BufferedReader (new InputStreamReader (System.in)); //Used for CCC
        String year = (in.readLine());
        for(int i = Integer.parseInt(year)+1;; i++){
            String f = Integer.toString(i);
            boolean [] characters = new boolean[10];
            boolean unique = true;
            for(int x = 0; x < f.length(); x++){
                if (characters[f.charAt(x) - '0']){
                    unique = false;
                    break;
                }
                else{
                    characters[f.charAt(x)-'0'] = true; 
                }
            }   
            if (unique){
                System.out.println(f);
                return; 
            }

具体来说,这个if语句是如何工作的?

if (characters[f.charAt(x) - '0']){

检查布尔值在这里做什么?难道他们都不会被默认为虚假吗?为什么 - &#39; 0&#39;那里?抱歉没有问题。

2 个答案:

答案 0 :(得分:1)

表达式

f.charAt(x) - '0'

将返回0到9之间的数字,具体取决于字符串x中位置f的数字。因此,代码将在数组中的每个10位数位置设置一个布尔标志,如果一个数字出现不止一次,那么它将报告错误并突破内部循环以考虑下一年。

答案 1 :(得分:0)

characters是一个包含10个元素的布尔数组,用于存储给定的输入字符(应该限制为十进制数字)是否在输入中出现多次。

数字的字符代码在0x30 - 0x39范围内; f.charAt(x)返回输入中索引x处的字符,然后- '0'将其转换为0 - 9范围内的数字 - 布尔数组的索引。

首次找到某个字符时,其插槽设置为true;再次找到时,unique设置为false,表示输入中包含重复的字符。