2016-09-14 498 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点相同 –