Sunday, 15 May 2011

java - Scanner cannot read input -



java - Scanner cannot read input -

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 1 above: "); homecoming stdin.readint(); } public static void performdotproduct() { stdout.print("enter elements of vector a: "); double[] = 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 size of matrix a: "); int size = scan.nextint(); double[][] = readmatrix(size); (double[] row : a) { (double item : row) stdout.print(item + "\t"); stdout.println(); } } public static double[] readvector() { string[] input = scan.nextline().split(" "); double[] x = new double[input.length]; (int = 0; < input.length; i++) x[i] = double.parsedouble(input[i]); homecoming 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++; } homecoming matrix; } }

i'm using readvector() method read row of doubles , homecoming double array. when used dot product, input beingness read returned fine, when utilize matrix-matrix multiplication option, readvector() doesn't wait input. throws numberformatexcpetion: empty string.

i don't understand why readvector() behaves differently.

the problem in line:

int size = scan.nextint();

when code asks come in size of matrix, come in number, , nail enter. above code, however, reads number enter. not consume come in (\n character).

after code consume matrix size, code does:

string[] input = scan.nextline().split(" ");

which consumes come in (\n character), , split space. (scan.nextline()), of course, returns empty string.

to prepare it, instead of using:

int size = scan.nextint();

use:

int size = scan.nextint(); scan.nextline();

java java.util.scanner

No comments:

Post a Comment