我试图创建一个程序,用户输入一个字符串,程序回显给监视器,每行一个字符。
但是,我无法编写我所写的内容。此行会弹出一个错误:
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);
}
}
另外,如果你能解释一下你的答案,那就非常感激了。
答案 0 :(得分:3)
没有括号,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);
}
问题应该消失。一般来说,我强烈建议总是使用括号,因为如果没有它们,很容易犯这样的简单错误。
答案 1 :(得分:2)
你的循环更适合缩进,
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);
上述内容无法编译,因为c
语句中无法显示println
。此外,它不是声明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);
答案 2 :(得分:2)
正如其他答案所指出的,您的循环不会按原样运作,因为println
将无法看到char c
变量。
然而,这不是您所看到的错误的原因。事实上,您的编译器可能甚至不会抱怨该行,因为它不足以确定您有范围问题。
要演示,如果您删除System.out.println
,仍然将无法编译。原因是声明一个这样的变量是无效的:
for (;;) char c='a';
您将收到一条错误消息,指出char c='a';
不是声明。
您可以将for
(和其他循环,条件等)与
System.out.println(...);
或 {...}
变量声明不是简单的声明,因此如果要声明变量,则必须将其括在带大括号{...}
的块中
一旦你这样做,很明显println
需要在这个区块内。因此,您将以与其他答案相同的代码结束,最重要的是您的问题缺少大括号。
答案 3 :(得分:1)
只需将System.out.println(c)
放在for循环范围内。
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);
}
}
}
答案 4 :(得分:1)
你错过了方括号!您的字符超出了范围。以下将有效。
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));
答案 5 :(得分:1)
正如其他人所指出的那样,这个问题本身就是这个问题:
for(int i=0; i<word.length(); i++)
char c = word.charAt(i);
第二行是“本地变量声明声明”。 specification of the Java Language 表明:
每个局部变量声明语句都包含 一个街区。
块是“一系列语句,本地类声明和本地变量声明语句 在大括号内 ”(JLS)。
您的行char c = ...
不是立即包含在块中(因为它是附加到for
循环的语句)。
Java语言根本不认为它是一个变量声明 - 所以你得到的错误令人困惑(我在Eclipse中看到了6个不同的错误)。 编译器没有说“块中没有包含局部变量声明语句”,因为在语法的非常低的层次上,它甚至没有考虑到这可能是一个变量声明语句。
解决方案很简单;在Java中您可以拥有“语句”的任何地方,您也可以拥有一个块(Java然后将其视为块语句)。请记住,块是在大括号中包含的许多语句。所以 - 在你的变量声明语句周围放置大括号,然后编译。
for (int i = 0; i < word.length(); i++) {
char c = word.charAt(i);
}
当然,下一步是将System.out.println
语句移到此块中,因为局部变量只能在声明它们的块中可见。
答案 6 :(得分:0)
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();
char[] charArray = word.toCharArray();
for (int i = 0; i < charArray.length(); i++) {
System.out.println("char[" + i + "]: " + new String(charArray[i]");
}
}
免责声明:实际上没有测试过这个