Tìm lỗi java

25/2/20
1
0
1
Vietnam
Các anh chị em giúp em sửa đoạn code dưới đây với ạ
PHP:
import java.util.*;
class lab03{
    //cau1
    public static boolean isNumber(String input){
        int laq=1; // kí tự kiểm tra
        for(int i=0;i<input.length();i++){
            if(Character.isDigit(input.charAt(i))==true)
                laq=1; // nếu là chữ số thì laq=1 và tiếp tục vòng lặp
            else{
                laq=0; // không là chữ số thì laq=0 và break
                break;
            }
        }
        if(laq==1)
            return true;
        else
            return false;
    }
    //cau2
    public static boolean isAllUpperCase(String input){
        int laq=1;//tương tự isNumber
        for(int i=0;i<input.length();i++){
            if(input.charAt(i)>='A' && input.charAt(i)<='Z'){
                laq=1;
            }
            else{
                laq=0;
                break;
            }
        }
        if(laq==1)
            return true;
        else
            return false;
    }
    //cau3
    public static String[] tokenizer(String input){
        String[] input1=input.split("\\W"); // "\\W" có nghĩa là các kí tự không thuộc a-z,A-Z,0-9
        return input1;
    }
    //cau4
    public static boolean isValidPassword(String input){
        int laq=1;
        int a=0;
        int countSpace=0;
        int count=0;
        for(int i=0;i<input.length();i++){ //đếm kí tự chữ số
            if(Character.isDigit(input.charAt(i))==true)
                count+=1;
        }
        for(int i=0;i<input.length();i++){
            if(input.charAt(i)>='A' && input.charAt(i)<='Z'){/*đếm chữ viết hoa hay không*/
                a+=1;
            }
            if(input.charAt(i)==' '){ // đếm khoảng trắng
                countSpace+=1;
            }
        }
        if(input.length()>=6 &&input.length()<=20 && count>=1 && a==1 && countSpace==0)
            //kiểm tra độ dài từ 6 đến 20, có ít nhất một chữ số, 1 chữ viết hoa, không có khoảng trắng
            return true;
        else
            return false;
    }
    //cau5
    //cau6
    //cau7
    public static String sumNumber(String input){
        int sum=0;
        List<String> array = new ArrayList<String>();
        array.add("");
        List<Integer> a = new ArrayList<Integer>();
        a.add(0);
        ArrayList<Double> b_doc = new ArrayList<Double>();
        b_doc.add(0.0);
        String s="";
        for(int i=0;i<input.length();i++){
            if(input.charAt(i)=='.' || (input.charAt(i)>='0' && input.charAt(i)<='9'))
                s+=input.charAt(i);
            else{
                array.add(s);
                s="";
            }
        }
        for(String w:array){
            int count=0;
            if(w!=null){
                for(int i=0;i<w.length();i++){
                    if(w.charAt(i)=='.'){
                        count+=1;
                    }
                }
                if(w.charAt(0)!='.' && count==1)
                    b_doc.add(Double.valueOf(w));
                if(w.charAt(0)!='.' && count==0)
                    a.add(Integer.valueOf(w));
            }
        }
        for(double i:b_doc)
            sum+=i;
        for(int i:a)
            sum+=i;
        String out=String.valueOf(sum);
        return out;
    }
    public static void main(String[] arr){
        String input="10/02/2019 a 37.10 n";
        System.out.print("Tong cac so trong chuoi la: "+sumNumber(input));
    }
}
Output hiện thế này ạ:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(String.java:658)
at lab03.sumNumber(lab03.java:93)
at lab03.main(lab03.java:108)
 

Joe

Thành viên VIP
21/1/13
2,732
1,255
113
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(String.java:658)
at lab03.sumNumber(lab03.java:93)
at lab03.main(lab03.java:108)
The exception happens at line 93 of lab03.java and that is:
PHP:
            int count=0;
            if(w!=null){
                for(int i=0;i<w.length();i++){
                    if(w.charAt(i)=='.'){
                        count+=1;
                    }
                }
                if(w.charAt(0)!='.' && count==1)      // <<---- Exception happens HERE
                    b_doc.add(Double.valueOf(w));
                if(w.charAt(0)!='.' && count==0)
                    a.add(Integer.valueOf(w));
            }
What does the exception says? It says "OutOfBoundsException" at w.charAt(0). Why? because String w is NOT null but empty. Meaning length() = 0 and that is the BUG in your codes. Solution:
PHP:
            int count=0;
            if(w!=null && w.length() > 0){    // <<----Check the length()
                for(int i=0;i<w.length();i++){
                    if(w.charAt(i)=='.'){
                        count+=1;
                    }
                }
                if(w.charAt(0)!='.' && count==1) 
                    b_doc.add(Double.valueOf(w));
                if(w.charAt(0)!='.' && count==0)
                    a.add(Integer.valueOf(w));
            }