while 循环用于布尔用户输入

发布于 2024-10-18 06:21:40 字数 5062 浏览 1 评论 0原文

在使程序大部分工作后(感谢您的帮助:))。我所需要的只是添加 while 循环,以便用户可以多次获得菜单选项。它开始在 continue 切换为 false 的行处给我错误“;预期”。这是代码。

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;

   }
}

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. It starts giving me errors as "; expected" at the line where continue switches to 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;

   }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

云柯 2024-10-25 06:21:40

一切看起来都不错,除了

Boolean continue = true;

等等

continue = false;

继续是一个保留字并且不能用作标识符。将变量重命名为 cont 或类似名称。

顺便说一下,我建议您在此应用程序中使用 boolean 而不是 Boolean

另外,我相信您的 if 结构中存在错误:

if (choice == 1)
    ...
if (choice == 2)
    ...
if (choice == 5)
    ...
else
    ...

choice != 5 时(也就是说,即使 choice 是1, 2, 3, .... 所以也许你想将其更改为

if (choice == 1)
    ...
else if (choice == 2)
    ...
else if (choice == 3)
    ...
else
    ...

最后,你可能还想考虑使用 switch 进行选择:

switch (choice) {

case 1:
    ...
    break;

case 2:
    ...
    break;

...

default:
    ...
}

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. Rename the variable to cont or something similar.

And by the way, I would recommend you to use boolean instead of Boolean in this application.

Also, I believe there is an error in your if-structures:

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

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 (choice) {

case 1:
    ...
    break;

case 2:
    ...
    break;

...

default:
    ...
}
情场扛把子 2024-10-25 06:21:40

我不确定这是否会引起冲突,但“继续”也是Java中的一个语句。也许,通过更改 continue 的变量名称,您的问题就会得到解决。所附链接介绍了如何在 Java 中将 continue 用作语句: http: //download.oracle.com/javase/tutorial/java/nutsandbolts/branch.html 您还可以做的是从您拥有的 if() 构造中创建一个 switch() 语句,但这是个人的事情品尝 :)

I'm not sure if this may cause conflicts, but "continue" is also a statement within Java. Maybe, by changing the variable name of continue, your problem will be solved. 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 :)

清引 2024-10-25 06:21:40

为了避免出现“m1 已定义”错误,请像这样编写开关(包括花括号):

switch (choice) {

case 1: {
    ...
    break;
  }

case 2: {
    ...
    break;
  }

...

default: {
    ...
  }
}

To avoid getting the "m1 is already defined" error, write the switch like that (including the curly braces):

switch (choice) {

case 1: {
    ...
    break;
  }

case 2: {
    ...
    break;
  }

...

default: {
    ...
  }
}
谈下烟灰 2024-10-25 06:21:40

如果您已转换为“switch”,则声明“Matrix m1 = null;”就在 switch 语句之前。在每个“案例”的初始化中,只需使用“m1 = new MatrixReader()”。对“m2”变量执行相同操作。

If you have converted to 'switch' then declare the 'Matrix m1 = null;' just before the switch statement. And in the initialization of each 'case' just use 'm1 = new MatrixReader()'. Do the same for 'm2' variable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文