2014-04-20 134 views
1

我想提交第二個代碼在spoj上,但它給出了錯誤的答案,但第一個被接受,但我認爲這兩個代碼的邏輯是相同的。兩個代碼有什麼區別

public class Main { 
    public static void main(String[] args) throws java.lang.Exception { 
     java.io.BufferedReader r = new java.io.BufferedReader(
       new java.io.InputStreamReader(System.in)); 
     String s; 
     while (!(s = r.readLine()).startsWith("42")) 
      System.out.println(s); 
    } 
} 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class Main { 
    public static void main(String[] args) throws IOException { 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     int n = Integer.parseInt(br.readLine()); 
     if (n != 42) { 
      System.out.println(n); 
     } 
    } 
} 
+1

http://ideone.com/Qr1q3N

可以,例如,通過以下方式引入循環嘗試使用'42xyz'作爲輸入字符串執行這兩個片段 –

+0

2代碼之間的區別是第二個代碼試圖將字符串轉換爲數字,如果該字符串不是數字 – user3260861

回答

0

有一個在你的第二個代碼中沒有循環。使用下面的輸入數據試試你的代碼:

1 
2 
88 
42 
99 

你的第二個代碼將處理輸入(即1)只有第一道防線。這裏是工作比如你代碼:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class Main { 
    public static void main(String[] args) throws IOException { 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     int n; 
     while ((n = Integer.parseInt(br.readLine())) != 42) { 
      System.out.println(n); 
     } 
    } 
} 

在這裏你可以看到這個代碼在行動:http://ideone.com/z8H4fP