簡體   English   中英

從java中的用戶輸入解析整數?

[英]parsing for integers from user input in java?

我想以188/4的形式從用戶那里得到一個有理數,並以int 188和int 4結尾。在Java中,有什么有效的方法? stringTokenizer是最好的方法嗎? 還是在c中有類似scanf的東西?

private int NUM;
private int DEN;
static Scanner s;
public Rational(){
    s = new Scanner(System.in).useDelimiter("/");
    System.out.println("Enter Rational number in the form of a/b:");
    NUM = s.nextInt();
    int d = s.nextInt();
    if(d == 0){
        throw new IllegalArgumentException();
    }
    else{
        DEN = d;
    }
}

當我運行此程序時,輸入數字后程序將凍結

嘗試這樣的操作(假設每個分數可以在單獨的行中輸入):

        s = new Scanner(System.in).useDelimiter("\n");
        System.out.println("Enter Rational number in the form of a/b:");
        String in = s.nextLine();
        while (in.length() > 0) {
            if (in.contains("/")) {
                try {
                     NUM = Integer.parseInt(in.split("/")[0]);
                     DEN = Integer.parseInt(in.split("/")[1]);
                } catch (Exception e){
                    throw new IllegalArgumentException("Fraction must contain numeric values only");
                }
            } else {
                throw new IllegalArgumentException("Fraction must contain a '/' character");
            }
            System.out.println("NUM = " + NUM + " DEN = " + DEN);
            in = s.nextLine();
        }

小調整...

private int NUM;
private int DEN;
static Scanner s;
public Rational(){
    System.out.println("Enter Rational number in the form of a/b:");
    s = new Scanner(System.in);
    String[] values = s.next().split("/");

    NUM = Integer.parseInt(values[0]);
    int d = Integer.parseInt(values[1]);
    if(d == 0){
        throw new IllegalArgumentException();
    } else{
        DEN = d;
    }
}

我能想到的唯一方法是將其視為字符串,刪除不必要的“ /”,然后使用Integer.parseInt()將其轉換回int。

  int NUM;
        int DEN;
        Scanner s;
            s = new Scanner(System.in).useDelimiter("/");
            System.out.println("Enter Rational number in the form of a/b:");
            String enteredString = s.nextLine();

            String firstString = "", secondString = "";
            StringBuilder sb = new StringBuilder(enteredString);

            boolean foundWeirdChar = false;
            boolean firstChar = true;
            char tempChar = '/';

            for(int i = 0; i < sb.length(); i++) {

                if(sb.charAt(i) == tempChar) {
                    foundWeirdChar = true;
                }

                if(!foundWeirdChar) {
                    firstString += sb.charAt(i);
                }else {
                    if(firstChar) { // Because the first char will be "/"
                        firstChar = false;
                    }else{
                     secondString += sb.charAt(i);
                    }
                }
            }
            int a = 0;
            int b = 0;
            try {
                a = Integer.parseInt(firstString);
                b = Integer.parseInt(secondString);

                System.out.println("First int: " + a + "\nSecond int: " + b);

            }catch(NumberFormatException ex) {
                ex.printStackTrace();
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM