[英]I can't figure out what's wrong, my logic seems correct
我知道搞砸的是我的checkIfEdu方法。 其他一切都很好,因為我嘗試了沒有該方法的情況。 但是,由於這種方法,它會將所有數據讀取到InvalidStudentEmails文件中! 我知道,其他一切都很好,因為當我采取該方法時,它會正確執行所有操作。 請幫忙!!!
import java.util.Scanner;
public class CheckStudentEmail
{
public static void main (String[] args) throws Exception
{
java.io.File filein = new java.io.File("StudentEmailData.txt");
java.io.File fileout1 = new java.io.File("ValidStudentEmails.txt");
java.io.File fileout2 = new java.io.File("InvalidStudentEmails.txt");
Scanner input = new Scanner(filein);
java.io.PrintWriter validOutput = new java.io.PrintWriter(fileout1);
java.io.PrintWriter invalidOutput = new java.io.PrintWriter(fileout2);
writeHeadings(validOutput, invalidOutput);
StudentEmail student = new StudentEmail();
while (input.hasNext())
{
student.readStudentData(input);
if (student.checkPeriod() == true && student.checkAtSymbol() == true
&& student.checkIfEdu() == true)
student.writeEmails(validOutput);
else
student.writeEmails(invalidOutput);
}
input.close();
validOutput.close();
invalidOutput.close();
}
public static void writeHeadings(java.io.PrintWriter validOutput, java.io.PrintWriter invalidOutput)
{
validOutput.printf("%-20s%20s", "Name", "Email Address (Valid)"); validOutput.println(); validOutput.println();
invalidOutput.printf("%-20s%20s", "Name", "Email Address (Invalid)");
invalidOutput.println();
invalidOutput.println();
}
}
這是我的方法
import java.util.Scanner;
public class StudentEmail
{
private String stuName;
private String stuEmail;
StudentEmail()
{}
StudentEmail(String name, String email)
{
stuName = name;
stuEmail = email;
}
public void readStudentData(Scanner input)
{
stuName = input.next();
stuEmail = input.next();
}
public boolean checkPeriod()
{
if (stuEmail.indexOf(".") != -1)
return true;
else
return false;
}
public boolean checkAtSymbol()
{
int atSymbol;
if (stuEmail.indexOf('@') != -1)
{
atSymbol = stuEmail.indexOf('@');
if (stuEmail.indexOf('@', atSymbol+1) != -1)
return false;
else
return true;
}
else
return false;
}
public boolean checkIfEdu()
{
int lengthOfEmail = stuEmail.length();
int position = lengthOfEmail - 3;
String checkWord = stuEmail.substring(position);
if (checkWord == "edu")
return true;
else
return false;
}
public void writeEmails(java.io.PrintWriter output)
{
output.printf("%-20s%20s", stuName, stuEmail);
output.println();
}
}
您將字符串與equals()方法進行比較。 使用'=='比較對象引用
您是否檢查過checkIfEdu()
return
?
另一件事是,正如我嘗試運行您的checkIfEdu()
它總是返回false。 因為您正在比較它作為參考。
要比較String,應如下所示:
if (checkWord.equals("edu")) {
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.