package algo.chapter1.Ex1_1_33;
import java.util.Scanner;
import edu.princeton.cs.introcs.StdIn;
import edu.princeton.cs.introcs.StdOut;
public class MatrixClient
{
static Scanner scan = new Scanner(System.in);
public static void main(String[] args)
{
while(true)
{
switch (getInput())
{
case 1:
//Dot Product
performDotProduct();
break;
case 2:
performMatrixProduct();
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
StdOut.println("Thank You!");
System.exit(0);
break;
default:
StdOut.println("Invalid Choice!!!");
}
}
}
public static int getInput()
{
StdOut.println("******************************");
StdOut.println("1.Dot Product");
StdOut.println("2.Matrix-Matrix product");
StdOut.println("3.Transpose");
StdOut.println("4.Matrix-Vector Product");
StdOut.println("5.Vector-Matrix product");
StdOut.println("6.Exit");
StdOut.println("******************************");
StdOut.print("\nChoose one from the above: ");
return StdIn.readInt();
}
public static void performDotProduct()
{
StdOut.print("Enter elements of vector A: ");
double[] A = readVector();
StdOut.print("Enter elements of vector B: ");
double[] B = readVector();
StdOut.println("The dot product is: " + Matrix.dot(A, B));
}
public static void performMatrixProduct()
{
StdOut.print("Enter the size of matrix A: ");
int size = scan.nextInt();
double[][] A = readMatrix(size);
for (double[] row : A)
{
for (double item : row)
StdOut.print(item + "\t");
StdOut.println();
}
}
public static double[] readVector()
{
String[] input = scan.nextLine().split(" ");
double[] x = new double[input.length];
for (int i = 0; i < input.length; i++)
x[i] = Double.parseDouble(input[i]);
return x;
}
public static double[][] readMatrix(int N)
{
int counter = 0;
double[][] matrix = new double[N][N];
while (counter < N)
{
StdOut.print("Enter elements of row " + (counter + 1) + ": ");
matrix[counter] = readVector();
counter++;
}
return matrix;
}
}
我正在使用readVector()方法读取一行双精度数并返回一个double数组。当它用于点积时,正在读取输入正常,但是当我使用矩阵乘法选项时,readVector()不等待输入。它抛出NumberFormatExcpetion:空字符串。
我不明白为什么readVector()表现不同。
答案 0 :(得分:2)
问题出在这一行:
int size = scan.nextInt();
当您的代码要求输入矩阵的大小时,输入一个数字,然后按Enter键。但是,上面的代码只读取您输入的数字。它不使用enter(\n
字符)。
在您的代码使用矩阵大小后,您的代码会执行:
String[] input = scan.nextLine().split(" ");
使用enter(\n
字符),然后按空格分割。当然,这个(scan.nextLine()
)返回一个空字符串。
要修复它,而不是使用:
int size = scan.nextInt();
使用:
int size = scan.nextInt();
scan.nextLine();
答案 1 :(得分:0)
在您的代码更改中:
int size = scan.nextInt();
要
int size = scan.nextInt();
scan.nextLine();