2017-01-18 8 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()メソッドと関係があると思います。

私は最初のオブジェクトと2番目のオブジェクトをユーザーから読み込むことでrrayが、私は、私は入力を見ずに、ユーザー

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

これはコンパイルする必要があります: 'return true 'の前に' if'があります(修正されたインデントですぐに認識されやすくなります) –

関連する問題