如果......不是int {

时间:2011-10-22 06:13:14

标签: java int

我试图让程序识别是否未输入int。

我见过以下所有内容:

   if  (v % 1) 

    parseInt();

但他们不适合我。

import java.util.Scanner;

public class LinearSlopeFinder {
    public static void main(String[]args){
        double x1, y1, x2, y2, n1, equation, constant = 0 ;
        double slope, slope1, slopeAns;
        Scanner myScanner = new Scanner(System.in);

        System.out.print("    What is the first set of cordinants? example: x,y ... ");
        String coordinate1 = myScanner.nextLine();

        //below is what i am referring to 


        if (coordinate1 != int ){    // if it is a double or String 
            System.out.println("Sorry, you must use whole numbers.What is the first set of cordinants? example: x,y ... ");
            System.out.print("    What is the first set of cordinants? example: x,y ... ");
            String coordinate1 = myScanner.nextLine();
        }

6 个答案:

答案 0 :(得分:6)

检查值是否是这样的原语是行不通的。 Java将无法以这种方式将值与类型进行比较。

一种方法是利用静态函数Integer.parseInt(String s)来查看是否输入了适当的int值。请注意,它会抛出NumberFormatException。如果您可以利用这一事实,您可以获得是否从函数提供了整数。

try {
   //Attempt the parse here
} catch (...) {
   //Not a proper integer
}

第二种技术(因为您已经在利用Scanner类)是使用Scanner methods hasNextInt()nextInt()来确定如果:

  1. Scanner在流
  2. 中有一个新整数
  3. 从流中获取实际的整数值
  4. 示例用法是:

    if (myScanner.hasNextInt()) {
       int totalAmount = myScanner.nextInt();
       // do stuff here
    } else {
       //Int not provided
    }
    

    正如您在更新中提到的,当Scanner的输入分隔空格时,这一切都很好。默认情况下,Scanner按空格分隔流中的值。当你有一个不同的分隔符(例如:“,”或“//”等)在逻辑上在流上分隔两个唯一值时会发生什么?

    解决方法是修改Scanner正在使用的分隔符。有一个名为useDelimiter(String pattern)的方法,它允许您指定如何在流中逻辑分隔值。它对于你正在处理的事情(或任何空格不划分值的情况)非常有用。

    用法看起来像这样:

    Scanner myScanner = ...; # Get this how you normally would
    String delimiter = ...;  # Decide what the separator will be
    myScanner.useDelimiter(delimiter); # Tell the Scanner to use this separator
    

    Scanner API中有一个很好的示例(请参阅我在该示例中包含的Scanner上的第一个链接),其中介绍了如何使用它。我建议检查一下,它会很好地为你(我相信)聚会。

答案 1 :(得分:2)

又一个解决方案,让您有选择:在JLS §3.10.1中,您可以读取整数。将定义放在正则表达式中,您有:

// input s
if (s.matches("(?i)[+-]?(0|[1-9][0-9]*|0[x][0-9a-f]+|0[0-7]+)L?")) { /* do something */}

缺点是,你在代码中添加了一个详细的数字定义--Java可以为你做到这一点。但是,奖励是你的案例2,3很容易解决:

String intLiteral = "[+-]?(0|[1-9][0-9]*|0[x][0-9a-f]+|0[0-7]+)L?";
// input s
if (s.matches("(?i)" + intLiteral + "," + intLiteral)) { /* do something */}

(事情不会那么容易,因为你可能也喜欢2, 3之类的字符串也有效 - 但我会把它留给你。)

回到常用的解决方案和关于2,3的评论,你必须养成分离问题的习惯:你已经知道了几种检查字符串是否包含整数的方法。你现在可以做的就是单独留下这个问题并解决你的逗号:

    String s = "2,3";
    String[] parts = s.split(","); // here we deal with commas

    try {
        // now when we have parts, deal with parts separately
        System.out.println("First:  " + Integer.parseInt(parts[0]));
        System.out.println("Second: " + Integer.parseInt(parts[1]));
    } catch (NumberFormatException e) {
        System.out.println("There was a problem, you know: " + e.getMessage());
    }

答案 2 :(得分:1)

您可以使用Integer.parseInt(yourInt),但是如果您没有收到整数,则必须捕获引发的错误,如下所示:

try {
  Integer.parseInt(yourInt);
}
catch (NumberFormatException e) {
  // do something that indicates to the user that an int was not given.
}

答案 3 :(得分:0)

if (coordinate1 != int)

不起作用,因为您将值与类型进行比较。这段代码甚至不应该编译。

使用:

try {
    int integer = Integer.parseInt(value);
} catch (NumbumberFormatException e) {
    // Not an integer
}

答案 4 :(得分:0)

使用此模型:

Integer result = null;
try {
    result = Integer.valueOf(input);
} catch (NumberFormatException e) {}
if (result != null) {
    // An integer was entered
}

Integer.valueOf会为带有deciamls的数字抛出异常,所以你不应该有任何问题。我正在使用Integer类vs int,因此可以将其设置为null。使用-1表示无法输入-1。

答案 5 :(得分:0)

您可以尝试使用的一种方法是新方法。这是我用来获取整数输入的一个:

public static int getIntInput(Scanner s) { // Just put your scanner into here so that the method can read inputs without creating a new scanner each time
    System.out.print("Enter int here: ");
    try {
        return Integer.parseInt(s.nextLine());
    } catch (NumberFormatException e) {
        System.out.println("You must enter a valid Integer literal.");
        return getIntInput(s);            // Note that this line just repeats the try statement all over again.
    }

如果输入是整数,则返回int;否则,它会再次尝试。注意:添加一个计数器,以便在有人在您的回车键上设置午餐包时代码不会中断。