我输入第一个数组后,在主错误中不断出现异常

时间:2014-10-23 00:35:49

标签: java arrays sorting boolean compare

出于某种原因,我收到错误:

线程“main”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:11     at java.lang.String.charAt(String.java:646)     在IdenticalArrays.main(IdenticalArrays.java:28)

/ *  *等级:CS 2301/08  *期限:2014年秋季  *姓名:Clarence E. Hollins III  *导师:拉沙德琼斯  *作业:4  * /  //创建一个程序,从用户接收两个字符串并打印它们是否相同

import java.util.Scanner;
import java.util.Arrays;
public class IdenticalArrays
{
   public static void main(String [] Args)
  {
     Scanner input = new Scanner(System.in);



     System.out.println("Enter list: ");
     String s = input.nextLine();
     char sizeofArray = s.charAt(0);

     int size = (int)sizeofArray; 

     int[] firstList = new int [size];
        for(int i = 0; i < firstList.length; i++)
           {
              firstList[i] = s.charAt(i+1);
           }



     System.out.println("Please enter list 2: ");
     int[] secondList = new int[size];

           for (int i=0; i<10; i++)
              {
                 secondList[i] = s.charAt(i+1);
              } 


              boolean status = equals(firstList, secondList);
     if(status == true)


     System.out.println("The first list is: " + firstList.length + " " + firstList);
     System.out.println("The second list is: " + secondList.length + " " + secondList);

  }

   public static boolean equals(int[] list1, int[] list2)
  {

     Arrays.sort(list1);
     Arrays.sort(list2);

     for(int i = 0; i < list1.length && i < list2.length; i++)
     {
        if (list1[i] != list2[i])
        {
                        return false;
        } 
     }
     return true;

  }      
}         

2 个答案:

答案 0 :(得分:0)

很难100%肯定,但是,如果你要做...

char sizeofArray = s.charAt(0);

然后......

for (int i = 0; i < firstList.length; i++) {
    firstList[i] = s.charAt(i + 1);

你需要将循环次数减少1,因为你已经从String中取出了第一个字符

现在,您可以使用String#subString减少一个字符的输入,或者您可以简单地将迭代次数减少一个......

for (int i = 0; i < firstList.length - 1; i++) {
    firstList[i] = s.charAt(i + 1);

这也适用于你的第二个循环

现在,尽管如此,鉴于你基本上忽略了size的价值,你应该做更像...... {/ p>

    //char sizeofArray = s.charAt(0);
    int size = s.length();

    int[] firstList = new int[size];
    for (int i = 0; i < size; i++) {
        firstList[i] = s.charAt(i);
    }

请注意,根据要求......

  

创建一个程序,从用户接收两个字符串并打印它们是否相同

String#equals(String)之类的东西会更快解决......;)

答案 1 :(得分:0)

只需使用String.toCharArray()

char[] firstList = s.toCharArray();

如果这些字符应该是数字,你可以做

char[] firstList = s.toCharArray();
int[] digits = new int[firstList.length];
for (int i = 0; i < digits.length; i++) {
    digits[i] = Character.digit(firstList[i], 10);
}

最后,要测试两个int数组是否相等,您可以使用Arrays.equals(int[],int[])