我是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;
}
}
答案 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" );