程序 ICS4U - Lab 1难点解析

软件运
• 阅读 806

ICS4U - Lab 1
Objective
This lab is designed to give you experience in creating and using objects.

Part 0 – TwoByTwoMatrix Class – TwoByTwoMatrix.java

You are to create a class called TwoByTwoMatrix containing fields and methods that could be used by a main method in another class to manipulate 2 by 2 matrices in various ways. A TwoByTwoMatrix is defined by the following fields:

class TwoByTwoMatrix
{
double a; // Top left element
double b; // Top right element
double c; // Bottom left element
double d; // Bottom right element

This corresponds to a matrix that looks like this: --- where a, b, c and d are real numbers.

You are to write the following constructors:

●// Creates a TwoByTwoMatrix assigning 0 to each element
public TwoByTwoMatrix ()

●// Creates a TwoByTwoMatrix with parameters giving initial
// values of the elements
public TwoByTwoMatrix (double a, double b, double c, double d)

You are to give the class functionality by writing the following instance methods:
(a)A toString method that will return a String of the TwoByTwoMatrix . For example, if the matrix is , the toString() method should return . Round to a maximum of 3 decimal places but ONLY for display purposes - meaning, do NOT change the values of the implicit matrix.

(b)A method called determinant that returns the determinant of this TwoByTwoMatrix as a double. See this video - https://www.khanacademy.org/m...

(c)A method called plus that returns the sum of this TwoByTwoMatrix and another as a TwoByTwoMatrix.

(d)A method called minus that returns the difference of this TwoByTwoMatrix and another as a TwoByTwoMatrix. (implicit minus explicit)

(e)A method called multiply that returns the product of this TwoByTwoMatrix and another as a TwoByTwoMatrix. https://www.khanacademy.org/m...

(f)A method called scalarMultiply that takes a double parameter and scalar multiplies it with this TwoByTwoMatrix. This method should not return anything. See video: https://www.khanacademy.org/m...

(g)A boolean method called isIdentityMatrix that returns true if this matrix is an identity matrix and false otherwise. If you get the identity matrix to 3 decimal places, then you may assume that it is the identity matrix. Use the roundThreeDecimals method to round each value to 3 decimal places (but only for checking if it is the identity matrix. ie. do not change the values in the Matrix).

(h)A boolean method called isInvertible that returns true if this matrix has an inverse and false otherwise. The inverse of a 2 by 2 matrix does not exist if and only if its determinant is 0. If the determinant is 0 after rounding to 3 decimal places, you may consider that to be 0.

(i)A boolean method called isInverse that takes another TwoByTwoMatrix as a parameter and returns true if this matrix and the other matrix are inverses of one another and false otherwise. Matrices A and B are inverses of one another if AB = BA = I where I is the 2 by 2 identity matrix. If you get the identity matrix to 3 decimal places, then you may assume that it is the identity matrix.

(j)A boolean method called equals that takes another TwoByTwoMatrix as a parameter and returns true if the matrices have the same elements in the same positions and false otherwise. Since the values are doubles and could be long decimals, this method will return true if all the elements are the same to 3 decimal places. You will write a class helper method to this effect (see method (m) below)

(k)A method called inverse that returns as a new TwoByTwoMatrix the inverse of the implicit TwoByTwoMatrix if it exists and throws an exception if it does not. The inverse of a 2 by 2 matrix does not exist if and only if its determinant is 0. See FAQ note.
https://www.khanacademy.org/m...

(l)A method called transpose that returns as a new TwoByTwoMatrix the transpose of the implicit TwoByTwoMatrix.
https://www.youtube.com/watch...

You must write the following class method:

(m)A method called roundThreeDecimals that takes a double parameter and returns the input rounded to three decimal places also as a double.

You should test your program thoroughly and systematically using a main method in another class. Your main method will not be marked. Be sure that your methods are titled exactly as written in this document as your methods will be tested with my own main method. Marks will be deducted if I need to change your program in order to make it work with mine.

For Submission Procedure and Grading Rubric, Please Check online course website.

Frequently Asked Questions

Question:
G) For the isIdentityMatrix question I don't understand the decimal part "If you get the identity matrix to 3 decimal places, then you may assume that it is the identity matrix. Use the roundThreeDecimals method to round each value to 3 decimal places (but only for checking if it is the identity matrix. ie. do not change the values in the Matrix)."

Answer:
For example, let's say I send your method the matrix
[1 0]
[0 1]
Your method should return true since this is the identity matrix.
If I send your method the matrix
[1 2]
[3 4]
Your method should return false as this is not the identity matrix.
Now, what if I send your method the matrix
[1.0003 0.0001]
[0.0001 1.00002]
If you don't round these values, your method will return false because you are comparing with exactly 1, 0, 0 1. But in this case, this is "close enough" to be the identity matrix. So in this case, the rule is to round each value to 3 decimal places. Rounded to 3 decimal places the first value 1.0003 will round to 1.000 and then when you compare to 1, you would get a true for that component. Same with the other 3 components once rounded.
In other words, this last matrix should cause your method to return true. This same idea of “rounding before checking” should be used in the equals() method as well - part j.

Question:
How do I throw an exception if the inverse Matrix doesn’t exist? This is for part k)
Answer:
If the inverse of the given matrix does not exist, i.e. the determinant is 0, then you can throw an exception like this:
throw new RuntimeException(“Inverse Matrix does not exist”);
This will allow your method to compile because if you throw an Exception, you don’t have to return a TwoByTwoMatrix in this situation.
Also if this line executes, your program will immediately stop running and display this error (much like an ArrayIndexOutOfBoundsException)
Question:
For the inverse method, part k, would a determinant of 0.00001 be considered to be 0 for the purposes of this method?
Answer:
Yes. Round the determinant to three decimal places and if you get 0, you can assume the inverse does not exist and then throw an exception.

WX:codehelp

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
11个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Caomeinico Caomeinico
3年前
shell-定义一个颜色输出字符串函数
写法1!/bin/bashfunctionechocolor()if$1"green";thenechoe"\03332;40m$2\0330m"elif$1"red";thenechoe"\03331;40m$2\0330m"fiechocolor
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Easter79 Easter79
3年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Easter79 Easter79
3年前
SpringMvc接受特殊符号参数被转义
WEB开发时,在前端通过get/post方法传递参数的时候 如果实参附带特殊符号,后端接收到的值中特殊符号就会被转义例如该请求: http://localhost:10001/demo/index.do?name张三(1)注:中文()不会出现此种情况后台就收到的实际name值为:  张三&40;1&41;&40;其实为h
Wesley13 Wesley13
3年前
mysql数据库的查询
1、“查”——之单表查询INSERTINTOstudent2(name,grade,gender)VALUES('songjiang',40,'男'),('wuyong',100,'男'),('qinming',90,'男'),('husanniang',88,'女'),('sunerniang',66,'女'),('wus
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
4个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(