JAVA Need help involving matrices and arrays

时间:2016-10-20 18:54:16

标签: java matrix multidimensional-array

I'm working on a test prep program. Its not homework or for a grade, I just need help finishing and fixing it so I can study and better understand how it works. The directions are "Write a program named Matrix1.java that randonly fills in 0s and 1s into an n-by-n matrix, prints the matrix." I'm still pretty new to coding so any help would be greatly appreciated. This is the code I have so far:

public class Matrix1{

   public static void main(String[] args){
      Matrix1 matrix=new Matrix1(5);
      matrix.fill();
      matrix.print();
   }

   public Matrix1(int n){
      int[][] matrix = new int[n][n];
   }
   public void fill(int n){ // randomly fill in 0s and 1s

      Random rand = new Random();
         for(int i = 0; i < n; i++){
            for(int j = 0; j < n; j++){
               Integer r = rand.nextInt;
               matrix[i][j] = Math.abs(r); 
            }
         }
   }
   public void print(int[][]matrix, int n){ //print the matrix, each row is printed in a separate line
      for(int i = 0; i< n; i++){
         for(int j = 0; j<n; j++){
            System.out.println(array[i][j]);
         }
      }
   }
}

I ended up confusing myself and I'm not sure how to fix it or continue. I think I'm partially on the right track though.

4 个答案:

答案 0 :(得分:0)

It looks like the right direction, check your main method to set the necessary parameters (size, array and size).

Also set the Random object to only be 0 or 1 (Check the Java class libraries for the answer) I believe you can set a parameter inside the Random.nextInt method.

Also if its required to print it like a double array, change up your printing logic since you are always writing to a new line

答案 1 :(得分:0)

Well, I see a few problems, which if fixed might help get you on the right track.

First of all, for the random integer, you'll probably want to use the method from this answer:

import java.util.concurrent.ThreadLocalRandom;

// nextInt is normally exclusive of the top value,
// so add 1 to make it inclusive
ThreadLocalRandom.current().nextInt(min, max + 1);

I don't think you need to use Math.abs in this case, as long as you call ThreadLocalRandom.current().nextInt(0, 2).

Second, there are a couple of problems with your printing code. First of all, you should be using matrix[i][j] instead of array[i][j]. Second, you'll want to use System.out.print instead of System.out.println.

It should be something like this:

for(int i = 0; i< n; i++){
    for(int j = 0; j<n; j++){
        System.out.print(matrix[i][j]);
    }
    System.out.println();
}

答案 2 :(得分:0)

Your code after fixes.

import java.util.Random;

public class Matrix1 {

private final int[][] matrix;
private final int n;

public Matrix1(int n) {
    this.n = n;
    this.matrix = new int[n][n];
}

/**
 * randomly fill in 0s and 1s
 */
public void fill() {
    Random rand = new Random();
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            matrix[i][j] = rand.nextInt(2);
        }
    }
}

/**
 * print the matrix, each row is printed in a separate line
 */
public void print() {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            System.out.print(matrix[i][j]);
        }
        System.out.println();
    }
}

public static void main(String[] args) {
    Matrix1 matrix = new Matrix1(5);
    matrix.fill();
    matrix.print();
}

}

So changes I've made:

  • I've changed "matrix" and "n" variables into class fields, so you don't have to pass them through class methods
  • filling array - it should be just 0/1 not any integer so you can use rand.nextInt(2) with bounds - it gives values less then 2
  • printing array - you have to print row in one line, then change line

答案 3 :(得分:0)

public class Matrix1{

public static void main(String[] args){
  Matrix1 matrix = new Matrix1(5);
  matrix.fill();
  matrix.print();
}

private int[][] m; //it is easier use a global variable

public Matrix1(int n){
  m = new int[n][n];
}

public void fill(){ // randomly fill in 0s and 1s
     for(int i = 0; i < m.length; i++){
        for(int j = 0; j < m.length; j++){
        if (Math.random() > 0.5) {
            m[i][j] = 1;
        } else {
            m[i][j] = 0;
        }
        }
     }
}

public void print(){ //print the matrix, each row is printed in a separate line
  for(int i = 0; i< m.length; i++){
     for(int j = 0; j<m.length; j++){
        System.out.print(m[i][j]); //only use print() for the same row
     }
     System.out.println("");
   }
}
}