Java程序不一致?

时间:2018-09-07 06:32:12

标签: java arrays

我从数据库中以0或1格式(如001、100、111)获取3位数字值。基于该值,我必须执行一些操作,我已经为其编写了代码,但不一致。对于3个值,然后将它们添加到ArrayList中,它可以正常工作。但是,当我将少于3个或超过3个值传递给ArrayList

时,它将不起作用

下面是我创建的程序,请帮助我纠正此程序。

package com.company;
import java.util.ArrayList;
public class Main {
    public static void main(String[] args) {
        // write your code here

        String num;

        ArrayList<String> al = new ArrayList<String>();
        al.add("100");
        al.add("111");
        al.add("010");

        //al.add("111");
        String[] array;
        if (al.size() > 0) {

            for (int i = 0; i < al.size(); i++) {
                array = al.get(i).split("");
                System.out.println("Size of array is" + array.length);
                for (int j = 0; j < al.size(); j++) {
                    System.out.println("size at position" + j + " is " + array[j]);

                    if (array[j].equals("1") && j == 0) {

                        System.out.println("PODS Enalbe");
                    } else if (array[j].equals("1") && j == 1) {
                        System.out.println("BAM Enalbe");
                    } else if (array[j].equals("1") && j == 2) {
                        System.out.println("PNDE Enalbe");
                    }
                }
            }
        } else {
            System.out.println("No value found in PTM_TRIGGER Table");
        }
    }
}

3 个答案:

答案 0 :(得分:0)

在您的内部循环中,您需要检查array.length(),而不是al.size()。 我对您的代码进行了一些更改,以使其更具可读性(和功能)

import java.util.ArrayList;
public class Main {

    public static void main(String[] args) {

        boolean isPODSEnable;

        // write your code here
        ArrayList<String> al = new ArrayList<String>();
        al.add("100");
        al.add("111");
        al.add("010");

        String[] array;
        if (al.size() > 0) {

            for (int i = 0; i < al.size(); i++) {
                array = al.get(i).split("");
                System.out.println("Size of array is" + array.length);
                for (int j = 0; j < array.length; j++) {
                    System.out.println("size at position" + j + " is " + array[j]);
                    if ( "1".equals(array[j])) {
                      switch(j) {
                        case 1: // not 0. Your array is [,1,0,0], not [1,0,0]
                              System.out.println("PODS Enalbe");
                              break;
                        case 2: System.out.println("BAM Enalbe");
                                break;
                        case 3: System.out.println("PNDE Enalbe");
                                break;
                    }
                }
            }
         }

        } else {
            System.out.println("No value found in PTM_TRIGGER Table");
        }
    }
}

答案 1 :(得分:0)

正如我在评论中提到的那样,内循环的停止条件是错误的。但是我觉得您的方法也有些复杂。您实际上并不需要将String拆分为String[],可以直接使用charAt访问字符。我还建议在循环List时使用增强的for循环,这样就不会犯错使用错误的停止条件的情况。

这将产生如下内容:

public static void main(String[] args) {
    List<String> al = new ArrayList<String>();
    al.add("100");
    al.add("111");
    al.add("010");
    al.add("1000");

    if (al.size() > 0) {
        for(String s : al) {
            if(s.length() != 3) {
                System.out.println("String has invalid length");
                continue;
            }
            if(s.charAt(0) == '1') {
                System.out.println("PODS Enable");
            }
            if(s.charAt(1) == '1') {
                System.out.println("BAM Enable");
            }
            if(s.charAt(2) == '1') {
                System.out.println("PNDE Enable");
            }
            System.out.println();
        }
    } else {
        System.out.println("No value found in PTM_TRIGGER Table");
    }
}

对于长度不正确的字符串,该由您自己决定。在我上面的程序中,它只是忽略它们。

答案 2 :(得分:-1)

import java.util.ArrayList;

公共类TestClass {

public static void main(String[] args) {

    boolean isPODSEnable = false;

    // write your code here
    ArrayList<String> al = new ArrayList<String>();
    al.add("100");
    al.add("111");
    al.add("010");
    al.add("0110");
    al.add("000");

    if (al.size() > 0) {

        for (String s : al) {
            int index = s.indexOf("1");
            switch (index) {
            case 0: // not 0. Your array is [,1,0,0], not [1,0,0]
                System.out.println("PODS Enalbe");
                break;
            case 1:
                System.out.println("BAM Enalbe");
                break;
            case 2:
                System.out.println("PNDE Enalbe");
                break;
            default:
                System.out.println("Not Found");
                break;
            }
        }
    } else {
        System.out.println("No value found in PTM_TRIGGER Table");

    }
}

}