第29行中的标识符预期错误

时间:2015-02-26 16:10:07

标签: java identifier

这是一个程序,用户输入一个句子然后选择一个字符。然后它告诉用户该角色出现了多少次,但我遇到一个错误,因为它预期有一个标识符。这是代码:

import java.util.Scanner;

public class StringTest{
public static void main(String[] args){
Scanner incomingString = new Scanner( System.in);
System.out.print("Type Something");
String s1 = incomingString.nextLine();
Scanner s2incomingString = new Scanner( System.in);
System.out.print("Choose a character"); 
String s2 = s2incomingString.nextLine();    

String result="";
StringBuilder sb = new StringBuilder(s1);
int counter = 0;
int start = 0;
int index = 0;

while (s1.length != -1){
 int counter = 0;
     index = s1.indexOf(s2,start);
     if (index != -1){
        counter++;
        start = index+1;
        }
     }    
 }
    System.out.println(index);         
}

2 个答案:

答案 0 :(得分:2)

这一行是当前的问题:

System.out.println(index);

它存在于任何方法,构造函数或初始化程序的正文之外 - 您无法做到这一点。我怀疑你的意思是它在main方法的主体中。

如果您缩进代码,这很多会更明显。这是你的代码,适当缩进(并在中间跳过一堆):

import java.util.Scanner;

public class Test{
    public static void main(String[] args){
        Scanner incomingString = new Scanner( System.in);
        ...
        int index = 0;

        while (s1.length != -1){
            int counter = 0;
            index = s1.indexOf(s2,start);
            if (index != -1){
                counter++;
                start = index+1;
            }
        }    
    }
    System.out.println(index);         
}

了解System.out.println来电与您预期的方法声明处于同一水平? 始终缩进代码 - 大多数IDE可以在您键入或按需时为您执行此操作。它让每个人都感觉更好。

通过在main方法的右大括号内移动该语句来修复问题,您将看到另外两个问题:

  • 您已经两次声明counter,其中第二个声明位于第一个声明已经在范围内的地方。
  • 您正在使用String.length,就好像它是一个字段,而不是一个方法;将s1.length更改为s1.length()

然后代码将编译 ...它不清楚您尝试做什么,而String.length()将永远不会返回-1 ...也许你想要while (index != -1)

答案 1 :(得分:0)

您正在使用

s1.length

但是length()是一种方法,而不是String的字段。

s1.length()

是你想要的。此外,您正在声明重复变量counter。您只能在本地范围内声明一次。