检查整数的字符串?

时间:2013-10-15 02:23:10

标签: java string parsing

好的,我之前发过一次,但是因为没有表现出基本的理解而被锁定了,我在锁定之前得到的答案对我没有帮助。我是一个超级初学者级别的java,这就是我希望我的程序要做的事情(将在最后发布代码)。我希望用户输入他们想要的任何内容。然后,如果它不是数字,我希望它显示他们需要输入一个数字。然后,在输入数字后,我希望它显示该数字是偶数还是奇数。我读到了关于parseInt和parseDouble但我无法弄清楚如何让它按我想要的方式工作。如果解析是我想要的,我不再确定。我不想立即将其转换为数字,只是为了检查它是否是一个数字。然后我可以在程序确定它是字符还是数字后继续做事。感谢您的帮助,如果您需要更多信息,请告诉我们!

好吧我改变了一些东西,并使用了很多来自no_answer_not_upvoted的代码。这就是我现在拥有的。它运行正常并使用方向中指定的负数和正数。唯一让我烦恼的是毕竟说完了,我在eclipse底部的编译框中得到了这个错误。程序完成预期并适当停止,但我不明白为什么我会收到此错误。

Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1585)
at monty.firsttry2.main(firsttry2.java:21)


public static void main(String[] args) {

    System.out.print("Enter a character or number. This program will run until you enter a whole number, then it will"
            + "tell you if it was even or odd.");

    while (true) {
    Scanner in=new Scanner(System.in);     

    int num;
    while(true)   {
        String input=in.nextLine();
    try {

        num=Integer.parseInt(input);

        break;
        }
    catch (NumberFormatException e) {System.out.print("That wasn't a whole number. Program continuing.");}



    }
    if (num==0) {System.out.print("Your number is zero, so not really even or odd?");} 
    else if (num%2!=0){System.out.print("Your number is odd.");}
    else {System.out.print("Your number is even");}
    in.close();






  } 

} }

4 个答案:

答案 0 :(得分:2)

<强>假设

如果字符串由一系列数字(0-9)组成,并且没有其他字符(除了可能是一个初始符号),它将被视为一个数字。虽然我知道这允许"-0""007"之类的字符串,我们可能不想将其视为数字,但我需要一些假设。这个解决方案是为了演示一种技术。

<强>解决方案

import java.util.Scanner;

public class EvensAndOdds {
    public static final String NUMBER_REGEXP = "-?\\d+";
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        for(;;) {   // Loop forever
            System.out.println("Enter a number, some text, or type quit");
            String response = input.nextLine();
            if (response.equals("quit")) {
                input.close();
                return;
            }
            if (response.matches(NUMBER_REGEXP)) {   // If response is a number
                String lastDigit = response.substring(response.length() - 1);
                if ("02468".contains(lastDigit)) {
                    System.out.println("That is an even number");
                } else {
                    System.out.println("That is an odd number");
                }
            } else {
                System.out.println("That is not a number");
            }
        }
    }
}

<强>理由

此解决方案将匹配多个ANY长度,而不仅仅是适合intlong的长度;所以它优于使用Integer.parseIntLong.parseLong,如果数字太长,它们都会失败。关于什么构成数字,这种方法也可以适应更复杂的规则;例如,如果我们决定允许带逗号分隔符的数字(例如"12,345"当前将被视为不是数字);或者,如果我们决定禁止带有前导零的数字(例如"0123",目前将被视为数字)。这使得该方法比使用Integer.parseIntLong.parseLong更通用,它们都带有一组固定的规则。

正则表达式说明

正则表达式是一种可用于匹配部分或全部String的模式。这里使用的正则表达式是-?\d+,这需要一些解释。符号?表示“可能”。所以-?的意思是“也许是一个连字符”。符号\d表示“一个数字”。符号+表示“任意数量的这些(一个或多个)”。所以\d+表示“任意数量的数字”。因此,表达式-?\d+表示“可选的连字符,然后是任意数量的数字”。当我们在Java程序中编写它时,我们需要将\字符加倍,因为Java编译器将\视为转义字符。

可以在正则表达式中使用许多不同的符号。有关所有内容,请参阅http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

答案 1 :(得分:0)

这将告诉你如何做到这一点

import java.util.Scanner;

public class EvenOdd {
  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.");
    try (Scanner in = new Scanner(System.in)) {
      int n;
      while (true) {
        String input=in.nextLine();
        try {
          n = Integer.parseInt(input);
          break;
        } catch (NumberFormatException e) {
          System.out.println("you did not enter just an integer, please try again");
        }
      }
      if (n % 2 == 0) {
        System.out.println(n + " is even");
      } else {
        System.out.println(n + " is odd");
      }
    }
  }
}

答案 2 :(得分:0)

正如其他答案中已经提到的,您需要使用

静态调用parseDouble
Double theNumber = Double.parseDouble(numberString);

接下来,您将需要查看将其包装在try/catch中,以便您可以在创建数字时进行偶数/奇数检查,或者如果捕获到异常则设置错误消息。

答案 3 :(得分:0)

由于您是初学者,您需要了解数字之间的差异(整数,双精度,字符串,字符),因此以下内容将指导您。

首先,一次读取一行输入, Java read line from file

然后扫描线寻找形成你认为是整数的字符(允许前导空格?,然后是'+'或' - ',然后是数字0-9,然后是尾随空格。

以下是规则(整数)

除此模式之外的任何内容都违反了'这是一个整数'的测试。 Btw,Double是扩展精度实数。

import java.lang.*;
import java.util.Scanner;

public class read_int
{
    public static boolean isa_digit(char ch) {
        //left as exercise for OP
        if( ch >= '0' && ch <= '9' ) return true;
        return false;
    }
    public static boolean isa_space(char ch) {
        //left as exercise for OP
        if( ch == ' ' || ch == '\t' || ch == '\n' ) return true;
        return false;
    }
    public static boolean isa_integer(String input) {
        //spaces, then +/-, then digits, then spaces, then done
        boolean result=false;
        int index=0;
        while( index<input.length() ) {
            if( isa_space(input.charAt(index)) ) { index++; } //skip space
            else break;
        }
        if( index<input.length() ) {
            if( input.charAt(index) == '+' ) { index++; }
            else if( input.charAt(index) == '-' ) { index++; }
        }
        if( index<input.length() ) {
            if( isa_digit(input.charAt(index)) ) {
                result=true;
                index++;
                while ( isa_digit(input.charAt(index)) ) { index++; }
            }
        }
        //do you want to examine rest?
        while( index<input.length() ) {
            if( !isa_space(input.charAt(index)) ) { result=false; break; }
            index++;
        }
        return result;
    }
    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.nextLine();
        if( isa_integer(input) ) {
            System.out.print("Isa number.");
        }
        else {
            System.out.print("Not a number.");
        }
    }
}