我正在尝试创建一个程序,在该程序中,用户输入一个字符串,该程序以每行一个字符的方式向监视器回显该字符串。
然而,我不能编译我所写的东西。在此行弹出一个错误:
char c = word.charAt(i);下面是我的代码:
import java.util.Scanner;
public class charAt
{
public static void main(String[] args)
{
System.out.println("Give me a word, just one word:");
Scanner kb = new Scanner(System.in);
String word = kb.nextLine();
for(int i=0; i<word.length(); i++)
char c = word.charAt(i);
System.out.println(" " + c);
}
}另外,如果你能解释一下你的答案,我将不胜感激。
发布于 2014-08-31 07:59:19
如果没有括号,Java将假定您的意思是:
for(int i = 0; i < word.length(); i++)
{
char c = word.charAt(i);
}
System.out.println(" " + c);问题是这里的c超出了print语句的作用域。因此,编译器不会知道c指的是什么,并且会抛出您所看到的错误。正如@CupawnTae所指出的那样,还有一个问题,即只声明一个变量而不声明任何语句对于for循环来说甚至是不够的。
相反,您应该像这样将括号放在自己的括号中,以消除歧义并修复作用域:
for(int i = 0; i < word.length(); i++)
{
char c = word.charAt(i);
System.out.println(" " + c);
}这个问题应该会消失。一般来说,我强烈建议始终使用括号,因为没有括号很容易犯这样的简单错误。
发布于 2014-08-31 07:53:51
您的循环缩进得更合适一些,
for(int i=0; i<word.length(); i++)
char c = word.charAt(i); // <-- Also, not a valid location to declare the char
// as noted by cupawntae
System.out.println(" " + c);上面的代码无法编译,因为在println语句中看不到c。此外,它不是声明char c的有效位置,但即使它是-它也不能作为裸语句访问。因此,您可以添加大括号来将println()包装到同一个块中-
for(int i=0; i<word.length(); i++) {
char c = word.charAt(i);
System.out.println(" " + c);
}或者你可以使用
for(int i=0; i<word.length(); i++)
System.out.println(" " + word.charAt(i));或者像这样使用String.toCharArray(),
for (char c : word.toCharArray())
System.out.println(" " + c);发布于 2014-08-31 08:09:26
正如其他答案所指出的那样,您的循环将不会按原样工作,因为println将无法看到char c变量。
然而,这并不是你所看到的错误的原因。事实上,你的编译器可能甚至不会抱怨这一行,因为它不足以确定你有一个作用域问题。
为了演示一下,如果删除System.out.println,它仍然不能编译。原因是,像这样声明变量是无效的:
for (;;) char c='a';您将得到一个错误,指出char c='a';不是一条语句。
您可以使用for (以及其他循环、条件等)。无论使用哪一种
System.out.println(...);或{...}括起来的块
变量声明不是简单的语句,因此,如果要声明变量,必须用大括号{...}将其括在块中
一旦你这样做了,很明显println需要在这个块中。因此,您将以与其他答案相同的代码结束,而底线是您的问题是缺少大括号。
https://stackoverflow.com/questions/25587719
复制相似问题