2016-09-14 494 views
-2

我在for循環條件語句中收到錯誤... 下面是我的代碼。for循環條件評估中的java錯誤:不是語句,表達式的非法開始

import static java.lang.Math.*; 
import java.util.*; 
import java.io.*; 

public class p3 { 

public static void main(String[] args) { 

    // input 
    Scanner sc = new Scanner(System.in); 
    int num = sc.nextInt(); 

    String result = "1"; 

    for (int j=1; j<num; j++) { 
     if (checker(result+"1")) result = result+"1"; 
     else if (checker(result+"2")) result = result+"2"; 
     else result = result+"3"; 
    } 

    System.out.println(result); 
} 

//checker function 
boolean checker(String sr) { 
    int n = sr.length(); 

    for (int m=1; m<=n/2; m++) { 
     for (int i=0; i<n-2m+1; i++) { 
      if (sr.substring(i, i+m) == sr.substring(i+m, i+2m)) { 
       return false; 
      } 
     } 
    } 

    return true; 
} 
} 

以下是錯誤信息。當然checker()方法中的循環條件有問題,但我無法修復它。

p3.java:30: error: ';' expected 
      for (int i=0; i<n-2m+1; i++) { 
          ^
p3.java:30: error: not a statement 
      for (int i=0; i<n-2m+1; i++) { 
           ^
p3.java:30: error: ')' expected 
      for (int i=0; i<n-2m+1; i++) { 
           ^
p3.java:30: error: ';' expected 
      for (int i=0; i<n-2m+1; i++) { 
            ^
p3.java:31: error: ')' expected 
       if (sr.substring(i, i+m) == sr.substring(i+m, i+2m)) { 
                   ^
p3.java:31: error: illegal start of expression 
       if (sr.substring(i, i+m) == sr.substring(i+m, i+2m)) { 
                   ^
p3.java:31: error: ';' expected 
       if (sr.substring(i, i+m) == sr.substring(i+m, i+2m)) { 
                   ^
7 errors 
+0

,由於某種原因,我不能讓這個頁面顯示我的整個錯誤消息... –

+0

你理解Java是不是喜歡數學?你需要一個*用於乘法。另外,用於字符串比較的'equals' – Li357

+1

提示:在運行編譯器之前編寫較少的代碼。並學習java語法規則。或者你打算來這裏爲每個編譯器錯誤,你會遇到?附註:請使用大括號**任何**塊;即使它只是一條線,或者是一條單線的if/else鏈!最後:名稱「檢查器」對讀者沒有任何意義。例如,您可以將其重命名爲* isResult()*。 – GhostCat

回答

0

了一些錯誤

for (int i=0; i<n-(2*m)+1; i++) { // use `*` 
     // again use `*` also how to compare String - use equals 
     if (sr.substring(i, i+m).equals (sr.substring(i+m, i+2 *m))) { 
      return false; 
     } 
    } 

另外的方法檢查必須是靜態的,因爲它是直接從main

static boolean checker(String sr) { 

多次調用使用*

字符串比較 - 使用equals

0

您在相關for循環中指定表達式作爲測試條件的方式是錯誤的。取而代之的for (int i=0; i<n-2m+1; i++)我猜你想它是for (int i=0; i<(n-(2*m)+1); i++)

0
  1. 在你的程序

    例如無法使用通常的公式:n-2m+1應該n-2*m+1

  2. 你不能簡單的從主方法 因爲調用checker(result+"2") main()方法是靜態的。要麼創建p3 類的對象並調用檢查器,要麼使checker()方法也是靜態的。

最終代碼會

import static java.lang.Math.*; 
import java.util.*; 
import java.io.*; 

public class p3 { 

    public static void main(String[] args) { 

     // input 
     Scanner sc = new Scanner(System.in); 
     int num = sc.nextInt(); 

     String result = "1"; 

     for (int j = 1; j < num; j++) { 
      if (checker(result + "1")) result = result + "1"; 
      else if (checker(result + "2")) result = result + "2"; 
      else result = result + "3"; 
     } 

     System.out.println(result); 
    } 

    //checker function 
    static boolean checker(String sr) { 
     int n = sr.length(); 

     for (int m = 1; m <= n/2; m++) { 
      for (int i = 0; i < n - 2 * m + 1; i++) { 
       if (sr.substring(i, i + m) == sr.substring(i + m, i + 2 * m)) { 
        return false; 
       } 
      } 
     } 

     return true; 
    } 
} 
+0

字符串比較怎麼樣? –

+0

我想我已經在我的代碼中解決了這個問題......雖然我沒有解決它,因爲這個問題與第1點相同 –