这是一个程序,用户输入一个句子然后选择一个字符。然后它告诉用户该角色出现了多少次,但我遇到一个错误,因为它预期有一个标识符。这是代码:
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);
}
答案 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
。您只能在本地范围内声明一次。