【问题标题】:check (with a function) if a String input from user is a character or integer. (java) [closed]检查(使用函数)来自用户的字符串输入是字符还是整数。 (java) [关闭]
【发布时间】:2023-03-10 01:17:02
【问题描述】:

我环顾四周,但我对 java 还是很陌生,我发现的所有与字符串输入和字符/数字有关的东西都对我丢失了。我已经看到了各种不同的方法来检查它是数字还是字符,但我不确定在我的情况下使用哪一种。我的程序的目标是让用户输入一个数字,然后检查并打印该数字是偶数还是奇数。但不要限制用户只输入一个整数。我想将输入设为“字符”,但我无法让扫描仪接受它,它想将其转换为字符串。所以现在我正在使用字符串输入,但我不确定如何在 main 下面编写一个函数,我可以调用该函数来检查用户的输入是数字还是字符。我不想为我编写整个程序,只想如何解决这个问题。如果我无法获得更多帮助,我会回来寻求更多帮助 :)
此外,如果您能够在回复时解释代码的每个部分在做什么,以帮助我了解哪些命令到底做了什么,这将有很大帮助。提前感谢您的任何回复!

好的,我会发布我的代码,我知道它有各种损坏,但我真的不知道下一步该去哪里。我希望用户输入他想要的任何内容,一个 char ,像 & $ # 这样的符号,或者一个数字。但是如果他输入除数字以外的任何内容,我希望程序给他一个错误。所以我想我必须让他们输入一个字符串,但我不知道如何在扫描仪输入字符串时使用我的测试函数。呃,我太迷路了。我需要它来检查字符串以查看它是字符还是数字,如果是字符,则向它们抛出错误。如果它是一个数字,检查它是偶数还是奇数,然后回答它是哪个。

公共类 firsttry2 {

public static void main(String[] args) {

    System.out.print("Enter a character or number. Seriously, though, it is meant to be a number, but you can put whatever you want here. If it isn't a number however, you will get an error message.");


    Scanner in=new Scanner(System.in);


    String input=in.next();
    boolean x=checkevenodd(input);

    //no idea where to go from here and what i have so far is probably badly broken
    //i cant get checkevenodd to work with my scanner input because it's expecting an integer but it's getting a string.









}
public static boolean checkevenodd(int input1){
    if (input1%2==0) return true;
    return false;
}

public static boolean checkchartype() {

} }

【问题讨论】:

  • 如果您知道可以输入数值或字符串,请在扫描仪中使用 nextLine() 方法。然后你会得到一个字符串。然后你可以检查它是数字还是字符

标签: java string input char int


【解决方案1】:

只需将用户输入传递给Integer.parseInt(String),如果它抛出NumberFormatException,则不是Integer。进一步检查字符串的长度,如果是1,它必须是一个字符。但在您的情况下,无需检查字符,只需限制整数。如果出现异常,提示输入错误。

int i = 0;

try
{
    i = Integer.parseInt(readit.next());
}
catch(NumberFormatException e)
{
    e.printStackTrace();
    return;
}

System.out.println(i);

【讨论】:

  • 大数呢?这是一个整数:123456789123456789,但它会被您的代码解释为不是“整数”,因为它不在int 范围内,但它仍然是一个“整数”
【解决方案2】:

如果您使用Integer.parseInt()(或Long.parseLong()),您仍将被限制为32 位(或64 位)有符号整数范围内的数字。但是你不需要解析一个java原始整数类型来检查用户是否输入了一个“整数”,它的数学定义是任何整数(任何大小),所以:

将您的用户输入读取为字符串并使用regex 为您完成工作:

检查输入是否为“整数”(在数学意义上):

if (input.matches("-?\\d+")) {
    // it's an integer, either negative or positive
}

要检查它,数字是“偶数”:

if (input.matches(".*[02468]")) {
    // it is even
}

注意String.matches() 必须匹配整个 字符串以返回true,因此不需要开始或结束锚点^$ - 它们是隐含的。

【讨论】:

  • 忽略语言环境设置,也就是分组输入:德语 1.000 或英语 1,000,两者都是 1000。对于真正的长整数,有 BigInteger 来解决这个问题。
  • @renes "1,000" 不是整数。这是一个整数的渲染。如果我正在实现它,我将完全禁止非数字字符。否则,您必须处理诸如“1,00,00”之类的错误输入,并且知道用户的首选语言环境,这不一定是已知的,例如“1.000”是 1000 还是 1?取决于你问谁。
  • 他从命令行接收输入,因此这是正常的或可能的。只是考虑可能性。
【解决方案3】:

首先你需要告诉你的程序输入应该是什么样的。为此,您可以定义一个集合 您的输入必须有或不能有的元素。然后您可以将用户输入与该集合进行比较,并可以确定输入是否合法。

其中一种标准方法是使用正则表达式。你可以用谷歌搜索java中的正则表达式。或者可以阅读教程 http://www.vogella.com/articles/JavaRegularExpressions/article.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 2018-03-20
    • 1970-01-01
    相关资源
    最近更新 更多