[英]while loop for boolean user input
After getting the program to work for the most part (the help is appreciated :)). 在使程序大部分工作之后(可以得到帮助:))。 All I needed was to add the while loop so the user gets the menu option as many times he wants to.
我需要做的只是添加while循环,以便用户可以多次获取菜单选项。 It starts giving me errors as "; expected" at the line where continue switches to false.
在continue切换为false的那一行,它开始给我错误,如“;预期”。 Here is the code.
这是代码。
import java.io.*;
import java.util.*;
class Matrix {
double[][] element;
int rows, cols;
Matrix(int rows, int cols) {
this.rows = rows;
this.cols = cols;
element = new double[rows][cols];
}
public double getValue(int row, int col) {
return element[row][col];
}
public void setValue(int row, int col, double value) {
element[row][col] = value;
}
public int getNoRows() { // returns the total number of rows
return rows;
}
public int getNoCols() { // returns the total number of cols
return cols;
}
// The methods for the main calculations
public Matrix AddMatrix(Matrix m2) {
int row1 = getNoRows();
int col1 = getNoCols();
Matrix result = new Matrix(row1, col1);
for (int i = 0; i < row1; i++) {
for (int j = 0; j < col1; j++) {
result.setValue(i, j, this.getValue(i, j) + m2.getValue(i, j));
}
}
return result;
}
public Matrix MultiplyMatrix(Matrix m2) {
if (this.getNoCols() != m2.getNoRows()) {
throw new IllegalArgumentException("matrices can't be multiplied");
}
int row2 = this.getNoRows();
int col2 = m2.getNoCols();
Matrix result = new Matrix(row2, col2);
for (int i = 0; i < row2; i++) {
for (int j = 0; j < col2; j++) {
result.setValue(i, j, result.getValue(i, j) + this.getValue(i, j) * m2.getValue(i, j));
}
}
return result;
}
public Matrix TransposeMatrix() {
int row3 = this.getNoCols();
int col3 = this.getNoRows();
Matrix result = new Matrix(row3, col3);
for (int i = 0; i < row3; i++) {
for (int j = 0; j < col3; j++) {
result.setValue(i, j, this.getValue(j, i));
}
}
return result;
}
public void DisplayMatrix() {
for (int i = 0; i < this.getNoRows(); i++) {
for (int j = 0; j < this.getNoCols();
j++) {
System.out.print((this.getValue(i, j)) + " ");
}
System.out.print("\n");
}
}
}
public class Lab1 {
public static void main(String args[]) throws FileNotFoundException {
int choice;
Scanner in = new Scanner(System.in);
Boolean continue = true;
while (continue){
System.out.println("Enter your choice /n");
choice = in.nextInt();
System.out.println("1. Add two matrices \n");
System.out.println("2. Multiplymatrix two matrices \n");
System.out.println("3. Take transpose of a matrix \n");
System.out.println("4. Display a matrix \n");
System.out.println("5. Exit \n");
if (choice == 1) {
Matrix m1 = MatrixReader();
m1.DisplayMatrix();
Matrix m2 = MatrixReader();
m2.DisplayMatrix();
Matrix m3 = new Matrix(m1.getNoRows(), m1.getNoCols());
m3 = m1.AddMatrix(m2);
m3.DisplayMatrix();
}
if (choice == 2) {
Matrix m1 = MatrixReader();
m1.DisplayMatrix();
Matrix m2 = MatrixReader();
m2.DisplayMatrix();
Matrix m3 = new Matrix(m1.getNoRows(), m2.getNoCols());
m3 = m1.MultiplyMatrix(m2);
m3.DisplayMatrix();
}
if (choice == 3) {
Matrix m1 = MatrixReader();
m1.DisplayMatrix();
Matrix m3 = new Matrix(m1.getNoRows(), m1.getNoCols());
m3 = m1.TransposeMatrix();
m3.DisplayMatrix();
}
if (choice == 4) {
System.out.println("Will need to call the DisplyMatrix method for the object \n");
}
if (choice == 5) {
continue = false;
}
else {
System.out.println("Incorrect input. Kindly enter again \n");
}
}
}
public static Matrix MatrixReader() throws FileNotFoundException {
System.out.println("Give the filename for the matrix");
Scanner filescanner = new Scanner(System.in);
Scanner scanner = new Scanner(new File(filescanner.nextLine()));
scanner.nextLine(); // removes the first line in the input file
String rowLine = scanner.nextLine();
String[] arr = rowLine.split("=");
int rows = Integer.parseInt(arr[1].trim());
String colLine = scanner.nextLine();
String[] arr2 = colLine.split("=");
int cols = Integer.parseInt(arr2[1].trim());
Matrix test = new Matrix(rows, cols);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
test.setValue(i, j, scanner.nextDouble());
}
}
return test;
}
}
Everything looks fairly good except 一切看起来都不错,除了
Boolean continue = true;
and 和
continue = false;
etc. 等等
continue
is a reserved word and may not be used as an identifier. continue
是保留字 ,不能用作标识符。 Rename the variable to cont
or something similar. 将变量重命名为
cont
或类似名称。
And by the way, I would recommend you to use boolean
instead of Boolean
in this application. 顺便说一句,我建议您在此应用程序中使用
boolean
而不是Boolean
。
Also, I believe there is an error in your if-structures: 另外,我相信您的if结构中存在错误:
if (choice == 1)
...
if (choice == 2)
...
if (choice == 5)
...
else
...
The else
branch will be taken in all cases when choice != 5
(that is, even when choice is 1, 2, 3, .... So perhaps you want to change it to 当
choice != 5
时,在所有情况下else
将使用else
分支(即,即使选择为1、2、3,...。所以您可能要将其更改为
if (choice == 1)
...
else if (choice == 2)
...
else if (choice == 3)
...
else
...
Finally, you may also want to consider using a switch
for the choice: 最后,您可能还需要考虑使用
switch
进行选择:
switch (choice) {
case 1:
...
break;
case 2:
...
break;
...
default:
...
}
I'm not sure if this may cause conflicts, but "continue" is also a statement within Java. 我不确定这是否会引起冲突,但是“ continue”也是Java中的一条语句。 Maybe, by changing the variable name of continue, your problem will be solved.
也许,通过更改变量名称continue可以解决您的问题。 The link attached refers to how continue is used as a statement within Java: http://download.oracle.com/javase/tutorial/java/nutsandbolts/branch.html And what you could also do is make a switch() statement from the if() construction you have, but that's something of personal taste :)
附件中的链接指向在Java中如何将continue用作语句: http : //download.oracle.com/javase/tutorial/java/nutsandbolts/branch.html而且,您还可以从以下位置执行switch()语句:您拥有的if()构造,但这有点个人喜好:)
To avoid getting the "m1 is already defined" error, write the switch like that (including the curly braces): 为了避免出现“已定义m1”错误,请像这样编写开关(包括花括号):
switch (choice) {
case 1: {
...
break;
}
case 2: {
...
break;
}
...
default: {
...
}
}
If you have converted to 'switch' then declare the 'Matrix m1 = null;' 如果已转换为'switch',则声明'Matrix m1 = null;'。 just before the switch statement.
在switch语句之前。 And in the initialization of each 'case' just use 'm1 = new MatrixReader()'.
在每个“案例”的初始化中,只需使用“ m1 = new MatrixReader()”即可。 Do the same for 'm2' variable.
对“ m2”变量执行相同的操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.