100 likes | 189 Views
(Quickly) More on Null references:. A null reference is a pointer to nothing. Pointers = space for address in memory Think of RAM, with each space in memory having its own unique address. (different spaces in memory do different things) Circle x; x is now a “null pointer”
E N D
(Quickly) More on Null references: • A null reference is a pointer to nothing. • Pointers = space for address in memory • Think of RAM, with each space in memory having its own unique address. (different spaces in memory do different things) Circle x; • x is now a “null pointer” • Meaning x can hold an address for a space in memory that is where a Circle will be, but currently it’s just empty x = new Circle(); • Makes a space for a circle object in memory • memory space holds radius, circumference, area fields • Holds getRadius() method, SetValues() method,etc. • x now holds the address of this new circle in memory. • It “points to” the circle in memory
Matrices: Making Arrays of Arrays 1. double[][] mat = new double[5][]; What have I just made? - an array of 5 addresses (that will eventually point to arrays of doubles). If I can’t do this: 2. double[][] mat = new double [][]? Why can I do #1?
To create an array of arrays: You can do: double[][] mat = {{3.2,4.1,2.5},{7.1,8.2,9.3}}; Or double[][] mat = new double[3][]; mat[1] = new double[] {3.1,2.4}; Or double[][] mat = new double[3][]; double[] arr = {7.2,3.1,2.4}; mat[2] = arr; Or double[][] mat; mat = new double[][] {{3.2,4.1,2.5},{7.1,8.2,9.3}};
Generate random numbers: At the top: import java.util.Random; Then inside the method create a new Random object: Random randvar = new Random(); Then access the randvar object’s nextInt() method, which generates a random number up to (but not including) 100 (or the number you put in as a parameter: int x = randvar.nextInt(100); Also: nextBoolean() nextDouble() nextFloat() nextFloat() Only nextInt takes a value int[] arrfield = {3,7,2,4,1,5}; int[][] matfield= {{3,7,2,4},{1,5,8,5},{3,2,4,1}}; • Create a class with two fields: arrfield and matfield. Create a constructor that initializes them as above: • Write a method in the class that prints out each value in the arrfield (using a loop); • Write a method that generates a random number between 0 and 20, then creates an array that long filled with random numbers between 0 and 100. It sets the arrfield to this new array: • Write a method that prints out every value inside each array in the matfield field: • Write a method that generates 2 random numbers, x and y. It then creates a matrix of x arrays, each y elements long. It then fills each array in the matrix with random numbers. It sets the matfield to this new matrix. • Write a method that generates a random number x. It creates a matrix of x arrays of ints. Then, for each array, it generates a new random number and creates a new array of ints of that length. It fills that array with random numbers, and places it in the original matrix. (In other words, we’re now creating a randomly sized array of randomly sized arrays of ints, with each array filled with random numbers) It then sets the matfield to this new matrix Extra: Sudoku class? Solve the board? What methods in class?
Problem 1: Create a class with two fields: arrfield and matfield. Create a constructor that initializes them: // one likely solution public class ArrayClass { private int[] arrfield; private int[][] matfield; public ArrayClass() { //could also pass array and matrix in as parameters arrfield = new int[] {3,7,2,4,1,5}; matfield = new int[][] {{3,7,2,4},{1,5,8,5},{3,2,4,1}}; } }
Problem 2: Write a method that prints out each value in the arrfield (using a loop) … public void printarr(){ for (int i = 0; i < arrfield.length; i++) { System.out.println(arrfield[i]+ " "); } // Or for (intx:arrfield) { System.out.println(x + " "); } }
Problem 3: Write a method that generates a random number between 0 and 20, then creates an array that long filled with random numbers between 0 and 100. It sets the arrfield to this new array: import java.util.Random; public class ArrayClass { private int[] arrfield; private int[][] matfield; public ArrayClass() { arrfield = new int[] {3,7,2,4,1,5}; matfield = new int[][] {{3,7,2,4},{1,5,8,5},{3,2,4,1}}; } public void makearr(){ Random randvar = new Random(); intlen = randvar.nextInt(20); int[] arr = new int[len]; for (int i = 0; i < arr.len; i++) { arr[i] = randvar.nextInt(100); } arrfield = arr; // what happens to {3,7,2,4,1,5} (the old array?) } }
Problem 4: Write a method that prints out every value inside each array in the matfield field: … public void printmat(){ for (int i = 0; i < matfield.length; i++) { //what does matfield.length give you the length of (specifically)? //what does this loop (above) take you through (specifically)? for (int j = 0; j < matfield[i].length; j++ ) { System.out.print(matfield[i][j]+ " "); } System.out.println(); } // Or for (int[] arr:matfield) { for (intele: arr) { System.out.print (ele+ " "); } System.out.println(); } }
Problem 5: Write a method that generates 2 random numbers, x and y. It then creates a matrix of x arrays, each y elements long. Now fill the array with random numbers. import java.util.Random; public class ArrayClass { private int[] arrfield; private int[][] matfield; public ArrayClass() { arrfield = new int[] {3,7,2,4,1,5}; matfield = new int[][] {{3,7,2,4},{1,5,8,5},{3,2,4,1}}; } public void makematrix(){ Random randvar = new Random(); int rows = randvar.nextInt(20); int cols = randvar.nextInt(20); int[][] mat = new int[rows][cols]; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++ ) { mat[i][j] = randvar.nextInt(100); } } matfield = mat; // so exactly what does this do? }
Problem 6: Write a method that generates a random number x. It then creates a matrix of x arrays. Then, for each array, it generates a new random number and creates a new array that length. It fills that array with random numbers, then places that in the matrix import java.util.Random; … public void makematrix(){ // how is this method different from the last one? // Why is it different in this way? Random randvar = new Random(); int rows = randvar.nextInt(20); int[][] mat = new int[rows][]; for (int i = 0; i < rows; i++) { int cols = randvar.nextInt(20); int[] arr = new int[cols]; for (int j = 0; j < cols; j++ ) { arr[j] = randvar.nextInt(100); } mat[i] = arr; } matfield= mat; }