2012-03-06 78 views
-3

我一直过这个问题,在这里我要插入一个IF语句到我的班来了,但一直返回类型/表达错误的非法启动。插入IF语句 - Java的

有没有什么我在这里做错了,如果有的话,有人可以指示我应该把这些IF语句的方向。

我需要一个IF语句,如:

IF (RList.contains(r1.getRouteName() == "Route2")) 
c1.setCollision1(b1.getStartTime ++ c1.getCollision1) 

ELSE 
c1.setCollision2(b1.getStartTime ++ c1.getCollision2) 

我知道这是不是可能是错误的更多,但无论如何。 我想这段代码插入到下面的类

import javax.swing.*; 
import java.sql.*; 
import java.util.*; 

public class Main { 



    public static void main(String[] args) { 


     Student s2 = new Student(); 
     Booking b1 = new Booking(); 
     Route r1 = new Route(); 
     Route r2 = new Route(); 
     Examiner e1 = new Examiner(); 
     Examiner e2 = new Examiner(); 
     Collision c1 = new Collision(); 

     //New Student 

     s2.setStudentId(Integer.parseInt(JOptionPane.showInputDialog("Enter ID for Student 2: [0001]"))); 
     s2.setFname(JOptionPane.showInputDialog("Enter first name of Student 2: ")); 
     s2.setLname(JOptionPane.showInputDialog("Enter last name of Student 2: ")); 
     s2.setAddress(JOptionPane.showInputDialog("Enter address for Student 2: ")); 
     s2.setPhoneNo(JOptionPane.showInputDialog("Enter phone number for Student 2: ")); 
     s2.setOtherDetails(JOptionPane.showInputDialog("Enter other details for Student 2: ")); 

     JOptionPane.showMessageDialog(null,"Student Two: \n" + s2.toString()); 

     //End of New Student 

     //New Booking 

     b1.setBookingId(Integer.parseInt(JOptionPane.showInputDialog("Enter ID for Booking 1: [0001]"))); 
     b1.setBookingType(JOptionPane.showInputDialog("Enter Booking Type for Booking 1: [Exam or Lesson]")); 
     b1.setStartTime(Double.parseDouble(JOptionPane.showInputDialog("EnterStart time for Booking 1: "))); 
     b1.setEndTime(Double.parseDouble(JOptionPane.showInputDialog("Enter address for Student 2: "))); 
     b1.setBookingDate(JOptionPane.showInputDialog("Enter Date for Booking 1: [01-JAN-2012]")); 
     b1.setHistory(JOptionPane.showInputDialog("Enter name of previous examiner 2: [enter 'null' if no previous]")); 


     JOptionPane.showMessageDialog(null,"Booking One: \n" + b1.toString()); 

     //End of New Booking 

     //Set the Routes 

     r1.setRouteId(0001); 
     r1.setRouteName("Route1"); 
     r1.setEndTime(0.40); 

     r2.setRouteId(0002); 
     r2.setRouteName("Route2"); 
     r2.setEndTime(0.50); 

     //End Set Routes 

     //Create Examiners 

     e1.setExaminerId(0001); 
     e1.setName("John Murphy"); 
     e1.setOtherDetails("ADI Registered"); 

     e2.setExaminerId(0002); 
     e2.setName("Lucy Casey"); 
     e2.setOtherDetails("ADI Registered"); 

     //End Create Examiners 

// <editor-fold defaultstate="collapsed" desc="Connect to database and insert data into database"> 


     String strConn = "jdbc:oracle:thin:@oracle.staff.ittralee.ie:1521:orcl"; 
     String strUser = "*"; 
     String strPassword = "*"; 

     try { 
     Driver drv = new oracle.jdbc.driver.OracleDriver(); 
     DriverManager.registerDriver(drv); 
     Connection conn = DriverManager.getConnection(strConn, strUser, strPassword); 
     //code to execute commands... 

// </editor-fold> 

     //StudentInsert 

     String query = "INSERT INTO Student(STUDENTID, FNAME, LNAME, ADDRESS, " + 
     "PHONENO, OTHERDETAILS) VALUES (?, ?, ?, ?, ?, ?)"; 

     PreparedStatement pstmt = conn.prepareStatement(query); 
     pstmt.setInt(1, s2.getStudentId()); 
     pstmt.setString(2, s2.getFname()); 
     pstmt.setString(3, s2.getLname()); 
     pstmt.setString(4, s2.getAddress()); 
     pstmt.setString(5, s2.getPhoneNo()); 
     pstmt.setString(6, s2.getOtherDetails()); 
     pstmt.executeUpdate(); 

     //End Student Insert 

     //Booking Insert 

     String query1 = "INSERT INTO Booking(BOOKINGID, BOOKINGTYPE, LNAME, STARTTIME, ENDTIME, " + 
     "BOOKINGDATE, HISTORY) VALUES (?, ?, ?, ?, ?, ?)"; 

     PreparedStatement pstmt1 = conn.prepareStatement(query1); 
     pstmt1.setInt(1, b1.getBookingId()); 
     pstmt1.setString(2, b1.getBookingType()); 
     pstmt1.setDouble(3, b1.getStartTime()); 
     pstmt1.setDouble(4, b1.getEndTime()); 
     pstmt1.setString(5, b1.getBookingDate()); 
     pstmt1.setString(6, b1.getHistory()); 
     pstmt1.executeUpdate(); 

     //End Booking Insert 

     //Returns Id of route not in use 

     String query2 = "SELECT R.RouteID FROM Route R WHERE RouteID not in (SELECT B.RouteId FROM Booking B)"; 

     JOptionPane.showMessageDialog(null, query2); 

     //End Route not in use 

     //Adding routes to a list to randomly assign an examiner to a route 

     LinkedList< String> EList = new LinkedList< String>(); 

     EList.add(e1.getName()); 
     EList.add(e2.getName()); 
     Collections.shuffle(EList); 

     LinkedList< String> RList = new LinkedList< String>(); 

     RList.add(r1.getRouteName()); 
     RList.add(r2.getRouteName()); 
     Collections.shuffle(RList); 

     JOptionPane.showMessageDialog(null, "Examiner: " + EList + "\nRoute: " + RList); 

     //End random assign route 



     } 

     catch(SQLException e) { 
     System.out.println(" A SQL error: " + e.getMessage()); 
    } 





    } 


} 
+1

你的if语法不正确。你有没有检查过关于它的参考手册? – Bozho 2012-03-06 23:24:12

+0

你的示例输入的问题是'=='不应该在if语句中。它返回一个布尔值,即使这在语法上是正确的,也不会被接受到'contains()'方法中。 – Jon 2012-03-06 23:24:18

+0

我知道这一切,如果陈述是错误的,我写它作为一个快速样本。但我所说的甚至是一个基本的if语句,如2 + 2 = 4与输出仍然返回相同的错误 – user1081326 2012-03-06 23:29:30

回答

2

这段代码是错误的

IF (RList.contains(r1.getRouteName() == "Route2")) 
c1.setCollision1(b1.getStartTime ++ c1.getCollision1) 

ELSE 
c1.setCollision2(b1.getStartTime ++ c1.getCollision2) 

它应该看起来像这

if (RList.contains(r1.getRouteName() == "Route2")) { 
    c1.setCollision1(b1.getStartTime + c1.getCollision1); 
} 
else { 
    c1.setCollision2(b1.getStartTime + c1.getCollision2); 
} 

而且

RList.contains(r1.getRouteName() == "Route2")

将无法​​正常工作,你希望它的方式。首先Strings应该使用equals,而不是==

r1.getRouteName().equals("Route2")进行比较。

其次,如果检查,如果RList包含取决于r1.getRouteName().equals("Route2")的结果truefalse值,这将做什么。我认为这可能会导致编译器错误。

如果要确定RList是否包含r1和r1的路由名称是Route2,则必须执行此操作。

if(RList.contains(r1) && r1.getRouteName().equals("Route2")) 

注意这将区分大小写的比较为不区分大小写使用equalsIgnoreCase()代替equals

+0

谢谢你纠正,但我知道所有这些,如果声明是错误的反正我写它作为一个快速样品。但我所说的甚至是一个基本的if语句,如2 + 2 = 4,并且输出仍然返回相同的错误 – user1081326 2012-03-06 23:30:53

+0

if语句2 + 2 = 4是什么样的?它应该看起来像我为回应你的其他评论而写的那个。 – twain249 2012-03-06 23:32:08

+0

也许可以更安全一些.toLower()以避免任何区分大小写的问题。 – 2012-03-06 23:46:53

3

如果语句应该是小写:

if(RList.contains(r1.getRouteName() == "Route2")) 
    c1.setCollision1(b1.getStartTime + c1.getCollision1) 

else 
    c1.setCollision2(b1.getStartTime + c1.getCollision2) 
+0

那里有那些双加号? – Cameron 2012-03-06 23:26:52

+0

在谓语,我认为预期的逻辑是: '如果(RList.contains( “Route2到” .equals(r1.getRouteName()))) ' 虽然语义似乎是有缺陷的。 – 2012-03-06 23:27:31

+0

我不知道他在那里试图做什么...:S – 2012-03-06 23:28:02

0

你试图找出一个特定的字符串值是否在链表?如果你是,那么这句法应该做的工作:

LinkedList<String> routeList = new LinkedList<String>(); 
routeList.add("Route 1"); 
routeList.add("Route 2"); 
Collections.shuffle(routeList); 
if (routeList.contains("Route 1")) { 
    // do something 
} else { 
    // do something else 
} 
0

你不能使用==操作符来比较两个字符串,用==操作符ü只能比较数值,试图尽可能地使用等于()方法比较两个不同的字符串。

+0

这并不完全准确。您可以使用==来比较'对象',但它会比较'对象'是否指向相同的数据,而不是它们的值是否相等。另外==用于所有原语,不仅仅是数字,所以'chars'和'booleans'使用== – twain249 2012-03-07 03:05:16