矩阵

时间:2015-09-16 16:17:16

标签: java

拥有此java代码并需要添加try / catch,以便在输入非数字字符时显示错误。我在哪里添加try / catch程序,以便显示错误:

package SumadeMatrices;

import java.util.Scanner;

public class SumadeMatrices {

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.print("Ingrese el Numero de Filas: ");
        int rows = s.nextInt();
        System.out.print("Ingrese el Numero de Columnas: ");
        int columns = s.nextInt();
        int[][] a = new int[rows][columns];
        int[][] b = new int[rows][columns];
        System.out.println("Ingrese la primera matriz");
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                a[i][j] = s.nextInt();
            }
        }
        System.out.println("Ingrese la segunda Matriz");
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                b[i][j] = s.nextInt();
            }
        }
        int[][] c = new int[rows][columns];
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                c[i][j] = a[i][j] + b[i][j];
            }
        }
        System.out.println("La suma de las dos matrices es:");
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                System.out.print(c[i][j] + " ");
            }
            System.out.println();
        }
    }
}

3 个答案:

答案 0 :(得分:3)

有两种可能的方法:

  • 处理每个例外并要求重新输入数据。
  • 检查是否抛出错误并退出并显示消息。

在第一种情况下,您需要为每个scanner.nextInt添加一个try catch。在这种情况下,您需要重新输入数据。

// For each readInt
boolean inputed = false;
int myVariable;
while (!inputed) 
    try {
        myVariable = scanner.nextInt();
        inputed = true;
    } catch (InputMismatchException e) {
        System.out.println("The last input is not a number. Reinput");
    }
}

在第二种情况下,您需要为整个函数添加try catch

 try {
     ....
     // whole function code
 } catch (Exception e) {
     System.out.println("An error has occured. Restart");
 }

答案 1 :(得分:2)

如果用户输入非数字字符,

Scanner#nextInt()将抛出java.util.InputMismatchException。您只需在发生时捕获它并显示有用的错误消息。

int value;
try {
    value = scanner.nextInt();
} catch (InputMismatchException e) {
    System.out.println("You dun goofed!");
}

这是一个更复杂的解决方案,在用户提供有效输入之前会一直询问。考虑将其添加到自己的方法中,每次需要新值时都可以调用它。

int value;
boolean hasValue = false;
while (!hasValue) {
    try {
        value = scanner.nextInt();
        hasValue = true;
    } catch (InputMismatchException e) {
        System.out.println("You dun goofed!");
    }
}

答案 2 :(得分:1)

扫描程序在读取后使用不同的方法转换字符串标记。无法转换时,方法会抛出InputMismatchException。 因此,有一种方法可以通过捕获此异常来实现输入验证。 在你的情况下,它可能是这样的:

    try {
        a[i][j] = s.nextInt();
    } catch (InputMismatchException e){
        System.out.println("Invalid input");
    }

方法抛出异常以允许您使用某些逻辑处理它们。在您的情况下,用户从键盘输入值到控制台,您决定在输入无效时该怎么做。例如,您可能只是中断所有输入过程,或者您可能要求重新输入。

此外,除了捕获异常之外,通常还有其他选项可以检查。如果ScannerhasNext()hasNextInt()方法,那么您可以检查输入是否为int,如果不是,则只需通过调用{{1}跳过它}}

scanner.next()

此外,您可以将此逻辑实现为您自己的方法,以避免代码重复。

while(!scanner.hasNextInt()){
    scanner.next();
}
a[i][j] = scanner.nextInt();