2017-01-18 2 views
0

это первый класс это шаблонный класся не могу найти ошибку в главном классе 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()

Я хочу заполнить первый и второй объекты в th е массив путем чтения из пользователей, но есть ошибка в колодце, который я не могу понять, почему, когда я прочитал от пользователя

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 \"[email protected]\" 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","[email protected]",200); 
    array[3] = new Email("Fwd: Boarding pass","[email protected]",100); 
    array[4] = new Email("You won 1M SR!","[email protected]",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,"[email protected]"); 

    //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 
+2

Привет, пожалуйста, предоставьте стек. – patrik

+0

Исключение должно также содержать номер строки, где это произошло ... и соответствующий индекс ... –

ответ

0

Не видя входы, трудно быть уверенным, но ваш IsValid () функция не проверяет наличие знака '@'. Если эта функция вызывается, а var - не имеет знака «@», var sep будет установлен в -1, вызывая ошибку с линией «to.substring (-1)».

+0

он должен скомпилировать: есть 'if' перед' return true' (проще распознать теперь с исправленным отступом) –