首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java的charAt()出错

Java的charAt()出错
EN

Stack Overflow用户
提问于 2014-08-31 07:47:36
回答 7查看 1.5K关注 0票数 4

我正在尝试创建一个程序,在该程序中,用户输入一个字符串,该程序以每行一个字符的方式向监视器回显该字符串。

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

代码语言:javascript
复制
char c = word.charAt(i);

下面是我的代码:

代码语言:javascript
复制
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);
  }
}

另外,如果你能解释一下你的答案,我将不胜感激。

EN

回答 7

Stack Overflow用户

发布于 2014-08-31 07:59:19

如果没有括号,Java将假定您的意思是:

代码语言:javascript
复制
for(int i = 0; i < word.length(); i++)
{
    char c = word.charAt(i);
}
System.out.println(" " + c);

问题是这里的c超出了print语句的作用域。因此,编译器不会知道c指的是什么,并且会抛出您所看到的错误。正如@CupawnTae所指出的那样,还有一个问题,即只声明一个变量而不声明任何语句对于for循环来说甚至是不够的。

相反,您应该像这样将括号放在自己的括号中,以消除歧义并修复作用域:

代码语言:javascript
复制
for(int i = 0; i < word.length(); i++)
{
    char c = word.charAt(i);
    System.out.println(" " + c);
}

这个问题应该会消失。一般来说,我强烈建议始终使用括号,因为没有括号很容易犯这样的简单错误。

票数 3
EN

Stack Overflow用户

发布于 2014-08-31 07:53:51

您的循环缩进得更合适一些,

代码语言:javascript
复制
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()包装到同一个块中-

代码语言:javascript
复制
for(int i=0; i<word.length(); i++) {
  char c = word.charAt(i);
  System.out.println(" " + c);
}

或者你可以使用

代码语言:javascript
复制
for(int i=0; i<word.length(); i++)
  System.out.println(" " + word.charAt(i));

或者像这样使用String.toCharArray()

代码语言:javascript
复制
for (char c : word.toCharArray())
  System.out.println(" " + c);
票数 2
EN

Stack Overflow用户

发布于 2014-08-31 08:09:26

正如其他答案所指出的那样,您的循环将不会按原样工作,因为println将无法看到char c变量。

然而,这并不是你所看到的错误的原因。事实上,你的编译器可能甚至不会抱怨这一行,因为它不足以确定你有一个作用域问题。

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

代码语言:javascript
复制
for (;;) char c='a';

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

您可以使用for (以及其他循环、条件等)。无论使用哪一种

  1. 一个语句,如System.out.println(...);
  2. 用大括号{...}

括起来的块

变量声明不是简单的语句,因此,如果要声明变量,必须用大括号{...}将其括在块中

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25587719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档