2012-11-30 52 views
0

節目我做要求我使用的FileInputStream計算課程的成績。的Java的FileInputStream使用,如果

我創建的類,當然,有一個方法:

public double getGradePoint() 
{ 
    if (letterGrade == "A+" || letterGrade == "A") 
     gradePoint = 4.0; 
    if (letterGrade == "A-") 
     gradePoint = 3.7; 
    if (letterGrade == "B+") 
     gradePoint = 3.3; 
    if (letterGrade == "B") 
     gradePoint = 3.0; 
    if (letterGrade == "B-") 
     gradePoint = 2.7; 
    if (letterGrade == "C+") 
     gradePoint = 2.3; 
    if (letterGrade == "C") 
     gradePoint = 2.0; 
    if (letterGrade == "C-") 
     gradePoint = 1.7; 
    if (letterGrade == "D+") 
     gradePoint = 1.5; 
    if (letterGrade == "D") 
     gradePoint = 1.0; 
    if (letterGrade == "F") 
     gradePoint = 0.0; 

    return gradePoint; 
} 

而且在測試客戶端,我有:

String subject; 
String number; 
String letGrade; 

Course course1 = new Course ("ENGL", "1111", "D+"); 
FileInputStream file1 = new FileInputStream ("test transcript 1.txt"); 
Scanner readFile = new Scanner (file1); 

while (readFile.hasNext()) 
{ 
    course1.setSubject (readFile.next()); 
    subject = course1.getSubject(); 
    course1.setNumber (readFile.next()); 
    number = course1.getNumber(); 
    course1.setLetterGrade (readFile.next()); 
    letGrade = course1.getLetterGrade(); 
    course1.getGradePoint(); 
    System.out.println (course1.toString()); 
} 

測試成績單的1.txt包含:

COMP 1631 A- 
ENGL 1101 B 
MATH 1200 C+ 

但由於某些原因,當我使用course1.getGradePoint(),它總是返回0.0

COMP 1631 A- (worth = 0.0) 
ENGL 1101 B (worth = 0.0) 
MATH 1200 C+ (worth = 0.0) 

我使用course1.getGradePoint()的,而上面的命令試過,像這樣:

String subject; 
String number; 
String letGrade; 

Course course1 = new Course ("ENGL", "1111", "D+"); 
course1.getGradePoint(); 

FileInputStream file1 = new FileInputStream ("test transcript 1.txt"); 
Scanner readFile = new Scanner (file1); 

while (readFile.hasNext()) 
{ 
    course1.setSubject (readFile.next()); 
    subject = course1.getSubject(); 
    course1.setNumber (readFile.next()); 
    number = course1.getNumber(); 
    course1.setLetterGrade (readFile.next()); 
    letGrade = course1.getLetterGrade(); 
    course1.getGradePoint(); 
    System.out.println (course1.toString()); 
} 

返回爲:

COMP 1631 A- (worth = 1.5) 
ENGL 1101 B (worth = 1.5) 
MATH 1200 C+ (worth = 1.5) 

運行程序後由於某種原因,它不適用於readFile.next()。如果有人能幫助我,那將不勝感激。

+0

取代getGradePoint中的if語句我會將letterGrade/gradePoint組合作爲鍵值對存儲在HashMap 中。在getGradePoint方法中,您可以簡單地做:return map.get(letterGrade); –

回答

2

-Objects在Java中是使用equals(),並String是Java中的Object,因此它遵循相同的規則進行比較。

-==比較primitive或檢查兩個或兩個以上Object Reference Variables都指向堆中或不同一目標將被使用。

-所以,你應該用equals()equalsIgnoreCase()(如果情況沒有問題)比較String對象。

如:

if (str1.equals(str2)){} 
+0

+1這是更好的解釋。所以,刪除我的。 –

+0

相同類型的兩個字符串不能同時存在於內存中嗎?所以內存引用應該匹配嗎? – om39a

+0

@RohitJain感謝您的評論 –

0

,如果他還沒有使用文件,以獲取檔次此代碼會工作。

因爲他使用的文件,創建的字符串對象不會實習生()。這意味着存在兩個相同類型的字符串對象,但在不同的內存引用中。

通過實習字符串你把它解析爲內存相同類型的任何現有的字符串,如果它存在,或創建一個新的參考。

這就是爲什麼使用文件得到的「A」與使用構造函數創建的「A」沒有相同的引用。

他可以把它通過使(course1.getLetterGrade()).intern()

只有一行代碼更改工作,但它始終是更好地使用等於字符串比較。

相關問題