简体   繁体   English

布尔用户输入的while循环

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM