扫描器输入数据类型

3
我需要编写一个测试类,实现以下功能:
  • a. 允许用户输入一个整数并显示它。
  • b. 允许用户输入一个浮点值并显示它。
  • c. 允许用户输入他/她的名字(没有空格)并将其显示为:“Hello <name>, welcome to Scanner!”
  • d. 允许用户输入一个字符并显示它。
  • e. 允许用户输入任何字符串(包括空格)并显示它。

我的问题是,如何简单地扫描只有一个Character并显示它?在第二个问题中,如何输入带有空格的String并显示它?(字母“d”和“e”)

我已经搜索了一些资料,但由于我刚接触Java和编程,无法找到最简单的解决方案。

以下是我的代码:

package aw;

import java.io.PrintStream;
import java.util.Scanner;

public class NewClass1
{
  public static void main(String[] args)
  {
      int num;
      double num2;
      String name;
      char c;
          Scanner sc = new Scanner(System.in);
          PrintStream ps = new PrintStream(System.out);

      //for integer
      System.out.println("Enter a number: ");
      num = sc.nextInt();
      ps.printf("%d\n", num);

      //for float
      System.out.println("Enter a float value: ");
      num2 = sc.nextDouble();
      ps.printf("%.2f\n", num2);

      //for name w/o white space
      System.out.print("Enter your first name: ");
      name = sc.next();
      ps.printf("Hello %s, welcome to Scanner\n", name);


      //for character
      System.out.print("Enter a character: ");
      c = sc.findWithinHorizon(".", 0).charAt(0);
      System.out.print(“%c”, c);

      //for name w/ white space
      System.out.print("Enter your full name: ");
      name = sc.nextLine();
      System.out.print(“%s”, name);
  }
}

我希望你能帮助我。谢谢!

3个回答

2

首先,不需要用 PrintStream 包装 System.out,因为 out 已经支持使用 format()printf() 方法进行格式化。

其次,您需要了解当您输入一行数据时,您也会用一个换行符 \n 终止它。 next<Type>() 方法只消耗 <Type> 而不消费其他任何字符。 因此,如果 next<Type>() 调用可能匹配到 \n,则需要在之前执行另一个 nextLine() 来跳过任何额外的 换行符 \n

这是修复后的代码:

  int num;
  double num2;
  String name;
  char c;

  Scanner sc = new Scanner(System.in);

  //for integer
  System.out.print("Enter a number: ");
  num = sc.nextInt();
  System.out.printf("%d\n", num);

  //for float
  System.out.print("Enter a float value: ");
  num2 = sc.nextDouble();
  System.out.printf("%.2f\n", num2);

  //for name w/o white space
  System.out.print("Enter your first name: ");
  name = sc.next();
  System.out.printf("Hello %s, welcome to Scanner\n", name);

  //for character
  System.out.print("Enter a character: ");
  c = sc.findWithinHorizon(".", 0).charAt(0);
  System.out.printf("%c\n", c);

  sc.nextLine(); // skip

  //for name w/ white space
  System.out.print("Enter your full name: ");
  name = sc.nextLine();
  System.out.printf("%s", name);

0
使用这个:
  //for a single char
  char Character = sc.findWithinHorizon(".", 0).charAt(0);

  //for a name with white space
  System.out.print("Enter your full name: ");
      String name2 = sc.next();
      String surname = sc.next();
      System.out.println(name2 + " " + surname);

当我运行程序时,sc.nextLine不允许我进行扫描,它会立即结束程序。 - Claude Rhay
没有任何错误信息。它是这样的: 输入一个字符:a a 输入您的全名: 构建成功(总时间:5秒)我无法在最后的扫描仪中输入。 - Claude Rhay
简而言之,sc.nextLine不能用于扫描我的字符串。-_- - Claude Rhay
这很令人困惑,但是 sc.nextLine() 会弄乱一切。这个可以用,我试过了: System.out.print("请输入您的全名:"); String name2 = sc.next(); String surname = sc.next(); System.out.println(name2 + " " + surname); - slanecek
一个好建议是 - 除非要写入磁盘,否则使用System.out.print()代替PrintStream。如果我帮到了你,请接受这个问题。 - slanecek
谢谢!需要15个声望才能投票支持,我只有10个。嘿嘿。抱歉 :) - Claude Rhay

0
使用Scanner.next(Pattern)并传递Pattern.compile("[A-Za-z0-9]")来让扫描器只接受定义的一个字符。
你可以传递任何正则表达式作为参数,并检查next()
Scanner.next();用于获取下一行包含空格的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接