Java错误';s charAt()

Java错误';s charAt(),java,char,Java,Char,我正在尝试创建一个程序,用户在其中输入一个字符串,程序将其回送到监视器,每行一个字符 然而,我不能编译我写的东西。此行将弹出一个错误: 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:"

我正在尝试创建一个程序,用户在其中输入一个字符串,程序将其回送到监视器,每行一个字符

然而,我不能编译我写的东西。此行将弹出一个错误:

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);
  }
}
import java.util.Scanner;
公共类字符
{
公共静态void main(字符串[]args)
{
System.out.println(“给我一个词,就一个词:”);
扫描仪kb=新扫描仪(System.in);
String word=kb.nextLine();

对于(int i=0;i,循环的缩进更合适,如下所示:

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);
或者你可以用

for(int i=0; i<word.length(); i++)
  System.out.println(" " + word.charAt(i));
公共类字符
{
公共静态void main(字符串[]args)
{
System.out.println(“给我一个词,就一个词:”);
扫描仪kb=新扫描仪(System.in);
String word=kb.nextLine();
char[]charArray=word.toCharArray();
对于(int i=0;i

免责声明:尚未实际测试此功能

仅将
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);
        }
    }
}
import java.util.Scanner;
公共类字符
{
公共静态void main(字符串[]args)
{
System.out.println(“给我一个词,就一个词:”);
扫描仪kb=新扫描仪(System.in);
String word=kb.nextLine();

对于(int i=0;i,如果没有括号,Java将假定您的意思是:

for(int i = 0; i < word.length(); i++)
{
    char c = word.charAt(i);
}
System.out.println(" " + c);

一般来说,我强烈建议始终使用括号,因为没有括号很容易犯类似这样的简单错误。

您刚刚错过了括号!您的字符c超出了范围。以下操作将有效

for(int i=0; i<word.length(); i++) {
   char c = word.charAt(i);
   System.out.println(" " + c);
}

for(int i=0;i正如其他答案所指出的,您的循环将无法正常工作,因为
println
将无法看到
char c
变量

然而,这并不是您看到的错误的原因。事实上,您的编译器甚至可能不会抱怨这一行,因为它没有足够的范围来确定您有范围问题

为了演示,如果删除
System.out.println
,它仍然不会编译。原因是这样声明变量是无效的:

for (;;) char c='a';
您将得到一个错误,指出
char c='a';
不是语句

您可以使用
for
(以及其他循环、条件等)与

  • System.out.println(…);
  • 用大括号括起来的块
    {…}
  • 变量声明不是简单的语句,因此如果要声明变量,必须用大括号将其括在块中
    {…}


    一旦您这样做,很明显,
    println
    需要在这个块中。因此,您将以与其他答案相同的代码结束,底线是您的问题缺少大括号。

    正如其他人所指出的,问题本身就是这个部分:

    for(int i=0; i<word.length(); i++)
        char c = word.charAt(i);
    

    当然,下一步是将
    System.out.println
    语句移到这个块中,因为局部变量只在声明它们的块中可见。

    你的
    for
    循环缺少括号。这可能是问题的一部分。你会遇到什么错误?这就是为什么有些语言需要括号s之后if/while/for…几乎正确-见我的答案-即使删除
    println
    @CupawnTae,也不会编译鉴于上下文,我认为OP无意删除
    println
    语句。尽管这一点很好。正如OP在问题中所说,错误出现在
    char c
    行,而不是
    println
    ,所以可能我是学究,但他看到的实际错误不是由范围外变量引起的,而是由无效循环引起的。此外,您的初始语句是错误的-编译器没有将其视为块version@CupawnTae你能详细解释一下最后的评论吗?几乎是对的——看我的答案——即使您删除了
    println
    @CupawnTae,我的代码将被编译。您也正确地认识到,如果没有新的块,它不是一个有效的语句位置。我的意思是,没有println,原始代码将无法编译,因此println不是问题。当然,如果有一个有效的块,它不在其中,这将是一个问题,但它不在其中'不会成为问题,因为任何地方都没有有效的变量声明使其不在的范围内:)虽然这是真的,但它不会编译,即使它会编译,它也不会做任何工作。因此,很明显,它不应该是一个裸变量声明。但是,尽管如此,+1表示在技术上对有效语句是正确的。@ElliottFrisch同意。主要的是,没有人解决OP报告的实际错误,这与
    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++) {
       char c = word.charAt(i);
       System.out.println(" " + c);
    }
    
    for(int i=0; i<word.length(); i++)
    System.out.println(" " + word.charAt(i));
    
    for (;;) char c='a';
    
    for(int i=0; i<word.length(); i++)
        char c = word.charAt(i);
    
    for (int i = 0; i < word.length(); i++) {
        char c = word.charAt(i);
    }