如何使用没有空间的扫描仪给输入数组[]?

时间:2016-08-16 16:20:51

标签: java arrays java.util.scanner

在下面的程序中,我试图检查号码是否为ISBN。我给输入空格(例如:0 3 0 6 4 0 6 1 5 2),因为数组只接受它。我不知道如何在没有空间阅读的情况下提供输入。任何人都可以帮我如何读取数字,例如:0306406152,它也会读取10个数字,如果(i == 10),否则它说它不是ISBN号来提供输出。

public class ISBN {

    int digits[];
    int dig = 11;
    int sum;
    int isbn1;

    public void CheckISBN() {
        for (int digit : digits) {
            // System.out.println(digit);
            if (dig >= 1) {
                dig--;
                digit = digit * dig;
                // System.out.println(dig);
            }
            sum = sum + digit;
            isbn1 = sum % 11;
        }
        if (isbn1 == 0) {
            System.out.println(isbn1);
            System.out.println("it's valid ISBN number");
        } else {
            System.out.println("sorry it's not valid ISBN");
        }
    }

    public static void main(String[] args) {
        ISBN aa = new ISBN();
        aa.digits = new int[10];
        Scanner scan = new Scanner(System.in);
        int i = 0;
        while (scan.hasNextInt()) {
            aa.digits[i] = scan.nextInt();

            i++;
            if (i == 10) // aa.CheckISBN();
            {
                break;
            }

            for (int j = 0; j < aa.digits.length; j++) {
                // System.out.print(aa.digits[j]);
            }
            //System.out.println();
        }
        aa.CheckISBN();
    }
}

SAMPLE OUTPUT:0 3 0 6 4 0 6 1 5 2
 它的有效ISBN号

2 个答案:

答案 0 :(得分:0)

如果没有空格,

import java.io.*;
import java.util.*;

public class ISBN {

    int digits[];
    int dig = 11;
    int sum;
    int isbn1;

    public void CheckISBN() {

        if(this.digits.length != 10)
        {
            System.out.println("sorry it's not valid ISBN");
            return;
        }

        for (int digit : digits) {
            // System.out.println(digit);
            if (dig >= 1) {
                dig--;
                digit = digit * dig;
                // System.out.println(dig);
            }
            sum = sum + digit;
            isbn1 = sum % 11;
        }
        if (isbn1 == 0) {
            //System.out.println(isbn1);
            System.out.println("it's valid ISBN number");
        } else {
            System.out.println("sorry it's not valid ISBN");
        }
    }

    public static void main(String[] args) {
        ISBN aa = new ISBN();
        Scanner scan = new Scanner(System.in);

        String num = scan.next(); //take input as a string
        int[] digits = new int[num.length()]; 

        for(int i = 0; i<digits.length; i++)
            digits[i] = num.charAt(i) - '0';

        aa.digits = digits;

        aa.CheckISBN();
    }
}

答案 1 :(得分:0)

或者将其扫描为int以免费获得数字格式验证:

public class ISBN {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        if (scan.hasNextInt()) {
            checkISBN(scan.nextInt());
        }
    }

    public static void checkISBN(int isbn) {
        int sum = sum(digits(isbn));
        int isbn1 = sum % 11;
        if (isbn1 == 0) {
            System.out.println(isbn1);
            System.out.println("it's valid ISBN number");
        } else {
            System.out.println("sorry it's not valid ISBN");
        }
    }

    private static int sum(int[] digits) {
        return IntStream.rangeClosed(1, digits.length)
                .map(i -> i * digits[digits.length - i])
                .sum();
    }

    private static int[] digits(int isbn) {
        return Integer.toString(isbn)
                .chars()
                .map(c -> c - '0')
                .toArray();
    }
}

N.B。:适用于带有或不带前导零的ISBN。