6读6整数后如何停止扫描?

时间:2014-09-06 14:23:35

标签: java

我现在正在学习Java,但我遇到了问题。该程序决定第三个点是否在笛卡尔坐标系中的矩形内。第一个点是矩形的左上角,第二个点是右下角。您必须像这样输入:a b c d e f,其中左(a,b)和右(c,d)。 E和f是第三点的要点。我希望扫描仪在6个整数后停止,因此无需填写非整数,例如' end'。这是我的代码的一部分:

import java.util.Scanner;

public class Rectangle {
    Scanner scanner = new Scanner(System.in);

    void insideRectangle() {

        int coordinate;
        int a;
        int b;
        int c;
        int d;
        int e;
        int f;

        System.out.println("Please fill in the numbers (6 maximum), with spaces in between");

        a = 0;
        b = 0;
        c = 0;
        d = 0;
        e = 0;
        f = 0;

        while ( scanner.hasNextInt() ) {
            coordinate = scanner.nextInt();
            a = coordinate;
            coordinate = scanner.nextInt();
            b = coordinate;
            coordinate = scanner.nextInt();
            c = coordinate;
            coordinate = scanner.nextInt();
            d = coordinate;
            coordinate = scanner.nextInt();
            e = coordinate;
            coordinate = scanner.nextInt();
            f = coordinate;
        }

        if ( a > c ) {
          System.out.println("error");
        } else if ( b < d) {
          System.out.println("error");
        } else if ( e >= a && c >= e && f <= b && d <= f ) {
          System.out.println("inside");
        } else {
          System.out.println("outside");
        }
    } 
}

2 个答案:

答案 0 :(得分:4)

尝试:

int[] values = new int[6];
int i = 0;
while(i < values.length && scanner.hasNextInt()) {
    values[i++] = scanner.nextInt();
}

然后数组包含您的6个值。

答案 1 :(得分:0)

我喜欢@Jean Logeart的方法,但我会使用for循环代替:

int[] values = new int[6];
for (int i = 0; i < values.length && scanner.hasNextInt(); ++i) {
    values[i] = scanner.nextInt();
}

为了完整起见,您可以将数组值分配给abc变量,以保持其余代码正常工作:

int a = values[0];
int b = values[1];
int c = values[2];
int d = values[3];
int e = values[4];
int f = values[5];

请注意,即使扫描程序发现少于6个值,这也会有效,因为数组值初始化为0。

最后提示:要测试实现,您可以从字符串创建Scanner,例如:

Scanner scanner = new Scanner("3 4 5 6 7 8 9 10 11");