问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java类方法?

发布网友 发布时间:2022-04-25 09:38

我来回答

2个回答

热心网友 时间:2023-12-02 08:47

emm...问题...不少。


1、这个构造函数问题就很大:

你传递一个r数组进来,然后你又让this.v1=v1,this.v2=v2,那么这个r的意义到底是什么?你构造出来的这个向量的v1和v2也还是根本没有任何值。


2、这。。这块问题太多了,我都不知道该怎么说,就全都不应该这么玩,下面加法也是一样的我就不圈出来了。

首先,非常不建议用null来声明任何变量,你声明r[]数组为null,下面又在循环里使用r[i],r都不是一个东西(因为它是null,还真不是个东西 手动滑稽),r[i]必然导致万恶的空指针异常NullPointerException。然后前面第一点说了,你的v1和v2根本就没有值,其实他们也是null,所以v1.length也将产生空指针异常,你的for循环根本没法进行。好,就算假设你的v1和v2都声明为new double[0]了,他们不再是null了,那么你的这个方法最终有可能返回null,又来了又来了,不要随便使用null,一不小心可能导致你main方法中调用这个方法后再次造成空指针异常。所以你非要这样写的话也建议写成return new double[0];这样即使它是一个空的数组但最起码它已经是个对象了,不再是null了。


3、main方法中null又双叒来了:

null数组不能放任何东西进去,不然将导致空指针异常。

所以现在怎么办?我估计你也发现了,因为你不知道这个数组究竟有多少个数字所以无法准确地定义这个r的长度。

本来我认为最优的做法是利用java的几种数据结构来保存输入项就好了,但是我怕你还没学到,其中这几个数据结构都不需要指定长度就能保存数据,他们能保存的最大数据量为int的最大值:java.util.List(java的集合,特别好用)、java.util.Vector(没错,java本来就有向量这种数据结构,比你这个MyVector功能要多一些)、java.util.Stack(栈其实是继承了向量,是一种特殊的向量)、java.util.Queue(java的队列),常用的就这些。

另外一种方法就是指定r[]数组有一个较大的length,也就是一开始就声明的足够大,比如直接double[] r = new double[999]但是这种是非常不好的办法,一个是如果你最终只存储两三个数字,那么数组空间就浪费太多了,另外是如果超过了999个数字,又会导致数组溢出。

所有我下面采用了第三种直截了当的方法帮你改进为,一开始你要输入向量的长度,你要说明向量到底有多长,这样不就能准确地定义r[]数组了吗?look:

这样就稳得一批了。


4、再看你main方法的最后:

你这种设计方法根本没有体现出两个向量之间的运算关系啊,根本就是只有一个向量在这里。因此,你的运算函数应该修改为传入一个新的向量,也就是这样:

这样的话,main函数里就可以这样了:

看到没,是不是一眼就能看出是向量1和向量2相加、点积?


5、审题!审题!你的toString()方法呐?结果保留两位小数呐?see:

另外题目里还说要定义一个int n的成员变量表示维度。我没太明白这个维度是啥?这不就是一维向量吗?维度不就是1吗?


综上所述,代码被我整体修改为:

public class MyVector {
private double[] array;
private int n = 1;

public MyVector(double[] array) {
this.array = array;
}

public double[] getArray() {
return this.array;
}

public double[] MyVectorDott(MyVector myVector2) {
double[] array2 = myVector2.getArray();
double[] result = new double[this.array.length];
for (int i = 0; i < this.array.length; i++) {
result[i] = this.array[i] * array2[i];
}
return result;
}

public double[] MyVectorAdd(MyVector myVector2) {
double[] array2 = myVector2.getArray();
double[] result = new double[this.array.length];
for (int i = 0; i < this.array.length; i++) {
result[i] = this.array[i] + array2[i];
}
return result;
}

public String toString() {
String s = "(";
for (int i = 0; i < this.array.length; i++) {
if (i < this.array.length - 1) {
s += String.format("%.2f", this.array[i]) + ",";
} else {
s += String.format("%.2f", this.array[i]);
}
}
return s + ")";
}

public static void main(String[] args) {
System.out.print("请输入向量长度:");
Scanner input = new Scanner(System.in);
int length = input.nextInt();
double[] array1 = new double[length];
double[] array2 = new double[length];

System.out.print("请输入第一组向量值:");
input = new Scanner(System.in);
for (int i = 0; i < length; i++) {
array1[i] = input.nextDouble();
}

System.out.print("请输入第二组向量值:");
input = new Scanner(System.in);
for (int i = 0; i < length; i++) {
array2[i] = input.nextDouble();
}
input.close();

MyVector myVector1 = new MyVector(array1);
System.out.println("向量1为:");
System.out.println(myVector1.toString());

System.out.println("向量2为:");
MyVector myVector2 = new MyVector(array2);
System.out.println(myVector2.toString());

MyVector myVector3 = new MyVector(myVector1.MyVectorAdd(myVector2));
System.out.println("向量1与向量2求和为:");
System.out.println(myVector3.toString());

System.out.println("向量1与向量2点积为:");
MyVector myVector4 = new MyVector(myVector1.MyVectorDott(myVector2));
System.out.println(myVector4.toString());
}
}


运行结果:


代码老是会挤在一起,你自己整理一下

追问谢谢大佬

热心网友 时间:2023-12-02 08:47

所谓类方法,就是用static修饰的方法,可以通过类名调用

不加static关键字的方法叫实例方法,调用前必须创建实例
public Integer static getSum(int x,int y){
return x*y
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
每年交100社保可以改500的吗 在学校上学买了保险暑假做了包皮手术保险公司报销吗 ...放假了要在家附近的医院做手术。请问学校的保险给保吗? ...外地学生,在学校参加了医疗保险,如果在家乡做手术,可以报销医疗费么... fm2010问题,高手进! 请FM2010高手帮我看看配置能玩吗? 有哪些小诗集? 如何去除塑料新杯异味 这周日就是情人节了~如果有人送我东西,我应该回什么呢? 崇左碧园未来城开发商是哪家公司? Java 方法(函数) java方法的定义和使用 朋友圈显示“该好友已设置仅你可见” 微信朋友圈相册,是不是只有设置了该照片可见的朋友才能看? 健身教练资格证找什么机构去领取,如何学习? 健身房教练证怎么考,0基础可以考过么? 怎么考健身房教练证呢? 台山南强小学六年级数学《圆的周长》预习案 圆的周长25,求直径? 求助!怎样利用科学计算器把角度转化为弧度? 圆周长 积分 【急求】 π的计算方法有哪些? 怎样用计算器打出(pai)啊如题 谢谢了 一个圆 已知半径 从圆心向下30度用科学计算器怎么算怎么按 如何全圆的周长 开口圆的周长怎么算? 一个园形花坛的周长是1.27米它的直径是多少米它的占地面积是多少平方米 周长求直径怎么算 计算圆的周长的工具 在一个周长为100cm的正方形纸片内,要剪一个最大的圆,这个圆的半径是多少了厘米? 被限制登录,一般要多久才能自动解除 一般封多久就自动解封 一般封多久就自动解封 微信第一次封号多久自动能解封 冻结后会怎样 微信账号被保护冻结 被冻结了怎么办? 紧急冻结后怎么解冻 路由器关闭无线WiFi信号后怎么开启? 被冻结了,好友能不能看到朋友圈的图片 请问无线路由器怎么关闭无线信号? 如何关闭无线路由器的无线信号 无线路由器关掉还可以上网 怎样单独关闭无线路由器信号,但要保持有线(台式)的链接? 怎么把无线路由器无线信号关掉,我直接插线,步骤详细点 华为无线路由器怎么无线怎么关闭 无线路由器怎么关闭,怎么重启,重启之后还用设置么 怎么样关闭 Tenda无线路由器的WLAN信号?? 无线路由器的无线信号发射功能可以关闭吗? 0.1%等于多少ppm?