2014-10-30 47 views
-3

我一直在試圖編碼火車預定系統,這是我的學校項目,但我不知道爲什麼我的if聲明直接跳轉到else,即使if聲明爲真。刪除else語句修復了這個問題,但我需要它,因爲它是強制性的打印適當的錯誤消息。Java直接跳到else語句?

for (int j=0;j<len;j++) 
    { 
     if (trainno[j]==tno) 
     { 
      stna = trainname[j]; 
      stno = tno; 
      sto = origin[j]; 
      std = destination[j]; 
      stf = fare[j]; 
     } 
     else if (tno==0) 
     { 
      System.out.println("Thanks for visiting our website!"); 
      return; 
     } 
     else 
     { 
      System.out.print("Wong input! Try again...."); 
     } //I wasn't able to assign an error message due to some problem because of which it was always jumping to else statement even if trainno[j] was equal to tno, do tell me if you can find the problem 
    } 

整個代碼

import java.io.*; 
class PROJECT 
{ 
    BufferedReader br=new BufferedReader (new InputStreamReader(System.in)); 
    void main() throws IOException 
    { 
    System.out.println("Welcome to IRCTC Railway Reservation System! Please proceed further to book your train!"); 
    System.out.println(); 
    String[] trainname = {"Rajdhani EXP", "AUG Kranti EXP", "Chennai EXP", "Aravali EXP", "Paschim EXP", "Gareeb Rath", "Punjab Mail", "Dehradun EXP", "Swaraj EXP", "Aravali EXP"}; 
    int[] trainno = {57835, 87612, 15384, 16512, 65265, 51654, 31543, 56416, 85484, 78455}; 
    String[] origin = {"Mumbai", "Mumbai", "Delhi", "Kolkata", "Mumbai", "Goa", "Durg", "Aligarh", "Jaipur", "Bhuj"}; 
    String[] destination = {"Surat", "Delhi", "Chennai", "Mumbai", "Ajmer", "Mumbai", "Bikaner", "Agra", "Madurai", "Buxar"}; 
    int[] fare = {650, 950, 1100, 1200, 1050, 600, 1100, 1250, 1300, 1100}; 
    int len = trainname.length; 
    int len1 = trainno.length; 
    int len2 = origin.length; 
    int len3 = destination.length; 
    int len4 = fare.length; 
    String stna = ""; 
    int stno = 0; 
    String sto = ""; 
    String std = ""; 
    int stf = 0; 
    System.out.println("Train Name\t\tTrain No.\tOrigin\t  Destination\tFare"); 
    System.out.println(); 
    for (int i=0;i<len;i++) 
    { 
     System.out.println(trainname[i]+"\t\t"+trainno[i]+"\t\t"+origin[i]+"\t\t"+destination[i]+"\t\t"+fare[i]); 
    } 
    System.out.println(); 
    System.out.print("Enter train no. to select train or enter 0 to exit :- "); 
    int tno = Integer.parseInt (br.readLine()); 
    for (int j=0;j<len;j++) 
    { 
     if (trainno[j]==tno) 
     { 
      stna = trainname[j]; 
      stno = tno; 
      sto = origin[j]; 
      std = destination[j]; 
      stf = fare[j]; 
     } 
     else if (tno==0) 
     { 
      System.out.println("Thanks for visiting our website!"); 
      return; 
     } 
     else 
     { 
      System.out.print("Wong input! Try again...."); 
     } //I wasn't able to assign an error message due to some problem because of which it was always jumping to else statement even if trainno[j] was equal to tno, do tell me if you can find the problem 
    } 
    System.out.print("Enter number of passengers (max 10) :- "); 
    int nopt = Integer.parseInt (br.readLine()); 
    if (nopt>10) 
    { 
     System.out.print("Uh-Oh! No. of passengers are more than 10, please try again"); 
     return; 
    } 
    String[] pn = new String[nopt]; 
    int[] age = new int[nopt]; 
    for (int k=0;k<nopt;k++) 
    { 
     System.out.print("Enter passenger's name :- "); 
     pn[k] = br.readLine(); 
     System.out.print("Enter passenger's age :- "); 
     age[k] = Integer.parseInt (br.readLine()); 
     System.out.println(); 
    } 
    double tf = (nopt*stf)*1.12; 
    System.out.println("Booking Details :-"); 
    System.out.println(); 
    System.out.println("No. of passengers :- "+nopt); 
    for (int z=0;z<nopt;z++) 
    { 
     System.out.println("Name of passenger travelling :- "+pn[z]); 
    } 
    System.out.println("Train Name :- "+stna); 
    System.out.println("Train Number :- "+stno); 
    System.out.println("Train Origin :- "+sto); 
    System.out.println("Train Destination :- "+std); 
    System.out.println("Train Fare/Person :- "+stf); 
    System.out.println("Total Fare (12% tax added) :- "+tf); 
    System.out.println(); 
    System.out.println("Thanks for your booking! Your seats have been confirmed. Have a good day!"); 
} 
} 
+0

我在這裏是一個完整的小白:P:'( 我不明白你的這個 意思 – 2014-10-30 10:55:41

回答

1

嘗試做這樣的:

System.out.print("Enter train no. to select train or enter 0 to exit :- "); 
int tno = Integer.parseInt (br.readLine()); 

if(nto==0){ 
    System.out.println("Thanks for visiting our website!"); 
    return; 
}else 
{ 
    int j=0; 
    while(trainno[j]!=tno && j<=trainno.length()) 
    {j++; 
    } 
    if (trainno[j]==tno) 
    { 
     stna = trainname[j]; 
     stno = tno; 
     sto = origin[j]; 
     std = destination[j]; 
     stf = fare[j]; 
    } 
    if(j>trainno.length()) 
    { 
     System.out.print("Wong input! Try again...."); 
    } 
    } 
} 
+0

我是一個完整的noob,但如何能‘讓你退出輸入錯誤的選擇嘗試其他的東西,但0’。我在int中輸入一個字母? – 2014-10-30 11:03:42

+0

沒有必要輸入'e'你可以使用'0' 我在這裏編輯代碼試一下 – 2014-10-30 11:09:42

+1

既然br是BufferedReader,你可以輸入任何內容並解析它。如果它不是正則表達式的數字。 String.matches(「[a-zA-Z]」); – Riad 2014-10-30 11:33:04

0

只需添加一些SOP /登錄if語句前檢查,如果布爾表達式返回true或false那麼即使在值進入else塊後也是如此。複製日誌並粘貼在這裏,然後我們可以進一步幫助。由於

0

如果你改變你的代碼(如下圖所示),那麼你應該把你的預期的結果:

int tno = Integer.parseInt(br.readLine()); 
    boolean foundTrain = false; 
    if (tno == 0) { 
     System.out.println("Thanks for visiting our website!"); 
     return; 
    } else { 
     for (int j = 0; j < len; j++) { 
      if (trainno[j] == tno) { 
       foundTrain = true; 
       stna = trainname[j]; 
       stno = tno; 
       sto = origin[j]; 
       std = destination[j]; 
       stf = fare[j]; 
       break; 
      } 
     } 
    } 

    if (!foundTrain) { 
     System.out.print("Wong input! Try again...."); 
     return; 
     // I wasn't able to assign an error message due to some problem because of which it was always jumping to else 
     // statement even if trainno[j] was equal to tno, do tell me if you can find the problem 
    } 
+0

正如我所說,我正在學習所有這些,我不能使用我沒有學習的東西,因爲我的老師是一個大痛苦:'(所以我不知道什麼!發現火車意味着 – 2014-10-30 11:09:05

+0

'!foundTrain'意味着boolean foundTrain爲false。 – 2014-10-30 11:13:19

+0

@chsdk和Ambrish你們倆都救了我!萬分感謝! – 2014-10-30 11:16:20

1

嘗試取出else if(tno==0)else更換。我不認爲有else if部分的要求。

另外,繼續AMbrish說的也應該使代碼運行。