检查两个字符串是否彼此相似

时间:2020-06-16 07:46:02

标签: java arrays string sorting runtime-error

我是Java的初学者。我开发了一个Java代码来比较两个用户输入的String是否以相同的频率包含相似的字符,然后将它们打印到屏幕上。但是它在编译过程中显示了运行时错误(ArrayOutOfBoundException)。帮我找到错误。

import java.util.Scanner;

public class Checker {   


    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        String x = scan.next();
        String y = scan.next();

        boolean anws = similarCharctr(x, y);


        System.out.println( (anws) ? "Similar" : "Dissimilar" );
    }        

    static boolean similarCharctr(String x, String y) {
        boolean status = false;

        if(x.length() == y.length()){
           status =  false;
        }            
            String e = x.toUpperCase();
            String f = y.toUpperCase();

           char c []  = new char[e.length()];
           char d []  = new char[f.length()];

           for(int i = 0; i<c.length; i++){
               c[i] = e.charAt(i);
               d[i] = f.charAt(i);
           }    
           for(int j = 0; j< (c.length - 1); j++){

                for(int i = 0; i< c.length; i++){

                    if( c[j] >c[i+1])
                    {
                        char temp;    
                       temp =   c[j];
                       c[j] = c[i+1];
                       c[i+1] = temp;

                        char temp1;    
                       temp1 =   d[j];
                       d[j] = d[i+1];
                       d[i+1] = temp1;  

                    }
           }
           }    
           for(int i = 0; i< c.length; i++){

                if(c[i] == d[i]){
                      status = true;
                }    
                else{
                     status = false;
                }    
           }   

        return status;            

    }       

}

2 个答案:

答案 0 :(得分:0)

我认为您需要比较两个长度相同的字符串,它们包含的字符是否相同?因此,我认为最好的选择是使用诸如charAt(index)之类的String类内置方法,因为这样可以减少不必要的代码量[创建字符数组并将它们进行比较]您上面的代码存在问题试图比较两个chracter数组,但数组索引比已经获得的数组索引高。 c [j]> c [i + 1]只是想想如果到达数组i的最后一个索引,然后仍然使用此公式,将会发生该错误,因为lastIndex +1不在数组中。

因此,我认为下面的代码将有助于解决您的问题。

最佳做法:

尝试对扫描仪对象而不是next()使用nextLine()方法,因为那样一来,由于next()只会将输入最多占第一位,因此您将无法获得包含空格的字符串。

在用户输入之前尝试使用System.out.println()语句,否则用户将不知道自己需要输入什么内容。

尝试提供有意义的变量名

尝试提出注释,尤其是当您向希望获得帮助的社区添加代码时

import java.util.Scanner;

public class Checker {   


public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);
    System.out.println("Input first String ");
    String str1 = scan.nextLine();
    System.out.println("Input Second String ");
    String str2 = scan.nextLine();
    boolean validity = similarity(str1, str2) ;


    System.out.println( (validity) ? "Similar" : "Dissimilar" );
}  

static boolean similarity(String str1,String str2) {


    if(str1.length() != str2.length()) { //Returning false because of strings length are not the same
        return false;

    }
    for(int i = 0 ; i < str1.length() ; i++) {//comparing both strings characters at the same index

            if(str1.charAt(i) != str2.charAt(i)) {

                return false;
            }


    }
    return true;
}

}

或使用equals()方法比较两个String,但是您无需执行任何操作。

答案 1 :(得分:0)

使用均等方法

喜欢

Scanner scan = new Scanner(System.in);
    String x = scan.next();
    String y = scan.next();

    boolean anws = x.equals(y);


    System.out.println( (anws) ? "Similar" : "Dissimilar" );