我无法在主类StringIndexOutOfBounds中找到错误

时间:2017-01-18 10:08:06

标签: java class stringindexoutofbounds

这是第一堂课 这是模板类

public class Email{
  private String title;
  private String to;
  private double size;
  private boolean sent;
  static int numEmails;

  public Email(String Title, String To, double Size){
    title = Title;
    to = To;
    size = Size;
    numEmails++;
  }

public void displayEmail(){
  System.out.printf("Subject: %30s%n", title);
  System.out.printf("To: %-35s%n",to);
  System.out.printf("This email has size: %.2f kB%n",size );
  if(sent)
  System.out.printf("This email has been sent%n");
  else
  System.out.printf("This email has not been sent%n");
}

public void sendEmail(){
  sent = true;
  displayEmail();
}

public boolean isValid(){
  int sep = to.indexOf('@');
  if(to.substring(sep).equals("@student.ksu.edu.sa"))
    return true;

  return false;
}

//setters
public void setTitle(String Title){
  title = Title;
}

public void setTo(String To){
  to = To;
}

public void setSize(double Size){
  size = Size;
}

public void setSent(boolean Sent){
  sent = Sent;
}

//getters
public String getTitle(){
  return title;
}

public String getTo(){
  return to; 
}

public double getSize(){
  return size;
}

public boolean getSent(){
  return sent;
}

}//End of class

这是第二类

当我运行它时,它会显示错误StringIndexOutOfBounds

我想这与方法isValid()

有关

我希望通过阅读用户来填充数组中的第一个和第二个对象但是我也无法理解为什么当我从用户那里读到时

import java.util.*;
public class Inbox{
static Scanner read = new Scanner (System.in);
static Email[] sentEmails = new Email[Email.numEmails];

//archive method
public static Email[] archive(Email[] emailList){
  for(int i=0;i<Email.numEmails;i++)
    if(emailList[i].getSent())
      sentEmails[i] = new Email(emailList[i].getTitle(),emailList[i].getTo(),emailList[i].getSize());
  return sentEmails;
}

//findByRecipient method
public static void findByRecipient(Email emailList[], String toAddress){
  System.out.println("The emails addressed to \"everyONE@student.ksu.edu.sa\" are:");
  System.out.println("==========================");
  toAddress = toAddress.toLowerCase();
  for(int i=0;i<Email.numEmails;i++)
    if(emailList[i].getTo().equals(toAddress))
      emailList[i].displayEmail();
}

//main
public static void main(String[] args){
  Email[] array = new Email[10];

  for(int i=0;i<2;i++){
    System.out.printf("Please enter the title, recipient, and size of email %d %n", (Email.numEmails+1));
    array[i] = new Email(read.nextLine(),read.nextLine(),read.nextDouble());
;}


  array[2] = new Email("Urgent: Lab final","everyone@student.ksu.edu.sa",200);
  array[3] = new Email("Fwd: Boarding pass","SaadAli@ksu.edu.sa",100);
  array[4] = new Email("You won 1M SR!","email@spam.com",5000.0);

  //1
  System.out.println("The Inbox currently contains");
  System.out.println("==========================");
  for(int j=0;j<Email.numEmails;j++){
    if(array[j]!=null)
      array[j].displayEmail();}

  for(int k=0;k<Email.numEmails;k++){
    if(array[k].isValid())
      array[k].sendEmail();
    else
      System.out.println("Email is invalid");
}


  //2
  archive(array);
  System.out.println("The Inbox after sending contains:");
  System.out.println("==========================");
  for(int s=0;s<sentEmails.length;s++){
    if(sentEmails[s]!=null)
      sentEmails[s].displayEmail();}

  //3
  findByRecipient(array,"everyONE@student.ksu.edu.sa");

  //4
  System.out.println("The titles of emails in archive are:");
  System.out.println("==========================");
  for(int r=0;r<Email.numEmails;r++)
    System.out.println(array[r].getTitle());


  //5
  System.out.println("Number of emails: " + Email.numEmails);


  }//End of main

}//End of class

1 个答案:

答案 0 :(得分:0)

如果没有看到输入,很难确定,但您的 isValid()功能并不会检查&#39; @&#39;标志存在。如果调用此函数并且var to 没有&#39; @&#39; sign,var sep 将被设置为-1,导致行&#34; to.substring(-1)&#34;出现错误。