0

这是我的任务:

编写一个程序,用户输入一个字符串,程序将其回显到监视器,每行一个字符:

C:\>java LinePerChar
Enter a string:
Octopus

O
c
t
o
p
u
s

我已经尝试过了,但是我遇到了一些编译错误。这是我的代码:

import java.util.*;

class CharactorEcho{
    public static void main(String args []){

        Scanner sc = new Scanner(System.in);

        System.out.println("Enter a string :");

        try {
            String inputString = sc.nextLine();
            for(int i=0; i < sc.length(); i++) {
                char c = inputString.charAt(i);
                System.out.println("" + c);
            }
        } catch(IOException e) {

        }
    }
}
4

3 回答 3

7

在您的循环中,您应该循环从String获得的长度Scanner.nextLine,而不是扫描仪本身。

for(int i=0; i<inputString.length(); i++){

如果您希望输入与同一行上的每个字符一起回显,请使用System.out.print而不是println.

于 2012-10-16T15:51:24.347 回答
3

两个问题:

更改for(int i=0; i<sc.length(); i++){for(int i=0; i<inputString.length(); i++){

您关心与扫描仪而不是输入字符串进行比较。

另外,请尝试捕捉

   java.util.NoSuchElementException
   java.lang.IllegalStateException

代替IOException, 作为你的声明sc.nextLine()与 throwsNoSuchElementExceptionIllegalStateException, not IOException

确保添加相关的导入语句。

于 2012-10-16T15:54:55.240 回答
3

您需要导入IOException. 将此行添加到代码的顶部,package如果有的话,就在该行之后:

import java.io.IOException;

另外,您要sc的是长度而不是字符串,因此请更改for为:

for(int i = 0; i < inputString.length(); i++) {

真的,你不应该抓到IOException。事实上,你的代码永远不会抛出异常。这确实是您所需要的:

public static void main(String args []){

    Scanner sc = new Scanner(System.in);

    System.out.println("Enter a string :");

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

调用made with只会在不可访问时抛出异常nextLine,甚至不会是,所以不用担心。ScannerSystem.inSystem.inIOException

最后一个观察,你不需要"" + c在你的println. System.out有一个println专门用于的方法char,所以你可以调用:

System.out.println(c);
于 2012-10-16T16:02:11.033 回答