【问题标题】:Reading Char Into an Array [duplicate]将字符读入数组[重复]
【发布时间】:2013-11-28 05:37:29
【问题描述】:

我有以下代码需要从用户那里获取 10 个字符并以相反的顺序打印出来。对于Scanner,我似乎无法克服这一语法错误。如何一次输入一个字符?这是我目前所拥有的:

import java.util.Scanner;

public class ReverseOrder
{
   //-----------------------------------------------------------------
   //  Reads a list of char from user and prints in reverse.
   //-----------------------------------------------------------------
   public static void main (String[] args)
   {
      Scanner scan = new Scanner (System.in);

      char[] letters = new char[10];

      System.out.println ("The size of the array: " + letters.length);
      for (int index = 0; index < letters.length; index++)
      {
         System.out.print ("Enter number " + (index+1) + ": ");
         letters[index] = scan.nextchar(); //doesnt like this line
      }

      System.out.println ("The numbers in reverse order:");

      for (int index = letters.length-1; index >= 0; index--)
         System.out.print (letters[index] + "  ");
   }
}

【问题讨论】:

标签: java arrays input char


【解决方案1】:

您也可以在不使用循环的情况下以相反的顺序打印它们:

System.out.println("The numbers in reverse order:");
System.out.println(new StringBuilder(new String(letters)).reverse())

【讨论】:

  • 这是一个很好的观点。然而,这不是问题。提问者在问如何使用Scanner.nextChar()
【解决方案2】:

很遗憾,nextChar() 不是一种方法。这可以使用next().charAt(0) 来解决!

public class ReverseOrder
{
    //-----------------------------------------------------------------
    //  Reads a list of char from user and prints in reverse.
    //-----------------------------------------------------------------
    public static void main (String[] args)
    {
      Scanner scan = new Scanner (System.in);

      char[] letters = new char[10];

      System.out.println ("The size of the array: " + letters.length);
      for (int index = 0; index < letters.length; index++)
      {
         System.out.print ("Enter number " + (index+1) + ": ");
         letters[index] = scan.next().charAt(0);

      }

      System.out.println ("The numbers in reverse order:");

      for (int index = letters.length-1; index >= 0; index--)
         System.out.print (letters[index] + "  ");
    }
}

【讨论】:

  • 如何读取“字符”?
  • 如果你可以调用 >> char c = scan.nextLine().charAt(0); 为什么要创建一个字符串 "in"
  • @user2664856 我刚开始编辑他的代码,现在更新并简化它。最后真的不重要了吗?这又是可读性与代码优雅的讨论;)
  • 我不是 100% 确定,但是每次创建一个字符串应该会消耗一点性能。
  • @user2664856 你可能是对的。在这个简单的程序中,我不会真正考虑这个因素。在这种情况下,永远不应该使用 Scanner,因为它非常慢。当您知道预期的数据时,最好使用 BufferedReader 等,例如在这种情况下。
【解决方案3】:

您可以在您的情况下使用:

letters[index] = scan.nextLine().charAt(0);

作为scan.nextchar()的替代品;

【讨论】:

    【解决方案4】:

    char c = scan.nextLine().charAt(0);

    它必须是 charAt(0) 而不是 charAt(index),因为他总是想要第一个字母。

    【讨论】:

    • 我让它运行起来了。感谢您和大家的帮助!
    • 请选择您在该问题上接受的答案。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 2014-07-01
    • 1970-01-01
    相关资源
    最近更新 更多