嗨,我真的很感谢这个实验室的帮助。我不明白我做错了什么;例如,我不明白显示的程序错误。
5.13实验5b
目标
在本实验中,您将练习使用带有数组的for循环并使用阈值比较双值,以查看两组数字是否相同。
背景阅读
ZyBooks第5章
任务
主要方法的第一条评论应该是您的身份证明:
//Lab5b, [Name], [mascID]
您需要:
创建并填充两组double值,其中元素的数量和元素本身由用户指定。 (即,用户将说明第一组中有多少个数字,给出该组的值,然后转到第二组数字)。
迭代集合并比较值。出于本实验的目的,我们将说明顺序对确定集合是否相同很重要。 (提示:这也意味着数组的长度必须相同)。
如果数组的长度和值都相同,则print set one和set two相等。否则,打印设置1和设置2不相等
使用阈值比较双值
回想一下,浮点数可能会在很小的值上有所不同。例如,1.0实际上可能存储为0.9999999 ...或1.0000000002。
在比较这些值时,我们经常使用“容差”级别,即“如果差异小于某个数量,那么它可以忽略不计,数字可以被认为是相同的。”我们可以通过比较元素差异的绝对值和容差来实现这一点。例如,
if ( Math.abs( array1[0] - array2[0] ) > 0.001 ) )
System.out.println("The values of array1[0] and array2[0] are not equal");
代码:
import java.lang.Math;
import java.util.Scanner;
public class SetComparison {
public static void main (String [] args) {
Scanner scnr = new Scanner(System.in);
int array1Elems = 0;
int array2Elems = 0;
int i = 0;
int j = 0;
array1Elems = scnr.nextInt();
array2Elems = scnr.nextInt();
double array1[] = new double[array1Elems];
double array2[] = new double[array2Elems];
for (i = 0; i < array1Elems; ++i) {
array1[i] = scnr.nextInt;
for (j = 0; j < array2Elems; ++j) {
array2[j] = scnr.nextInt;
}
if (Math.abs(array1[i] - array2[j]) > 0.001) {
System.out.println("set one and set two are not equal");
}
else if (Math.abs(array1[i] - array2[j]) < 0.001) {
System.out.println("set one and set two are equal");
}
}
}
}
输入节目输入
6 45.24 54.67 42.55 44.61 65.29 49.75 6 45.24 54.67 42.55 44.61 65.29 49.75
此处显示的程序错误SetComparison.java:23:错误:不能 找到符号 array1 [i] = scnr.nextInt; ^符号:变量nextInt位置:变量scnr类型Scanner SetComparison.java:25:错误:不能 找到符号 array2 [j] = scnr.nextInt; ^符号:变量nextInt位置:类型为Scanner 2错误的变量scnr
答案 0 :(得分:0)
除了@Andy Turner在评论中所说的内容(你错过了()
),你的问题在于嵌套循环*。检查值后,需要从内循环中break
。
注意:这也将打印每次迭代是否相等,而不是整体。
for (i = 0; i < array1Elems; i++) {
array1[i] = scnr.nextDouble();
for (j = 0; j < array2Elems; j++) {
array2[j] = scnr.nextDouble();
if (Math.abs(array1[i] - array2[j]) > 0.001) {
System.out.println("set one and set two are not equal");
} else if (Math.abs(array1[i] - array2[j]) < 0.001) {
System.out.println("set one and set two are equal");
}
break;
}
}
*虽然有更好的方法可以做到这一点,但这只是为了尽可能地匹配OP代码
答案 1 :(得分:0)
尝试这个答案我认为这会对你有帮助......
import java.lang.Math;
import java.util.Scanner;
public class SetComparison {
public static void main (String [] args) {
Scanner scnr = new Scanner(System.in);
int array1Elems = 0;
int array2Elems = 0;
int i = 0;
int j = 0;
array1Elems = scnr.nextInt();
array2Elems = scnr.nextInt();
double array1[] = new double[array1Elems];
double array2[] = new double[array2Elems];
for (i = 0; i < array1Elems; ++i) {
array1[i] = scnr.nextInt();
}
for (j = 0; j < array2Elems; ++j) {
array2[j] = scnr.nextInt();
}
for (i = 0; i < array1Elems; ++i) {
for (j = 0; j < array2Elems; ++j) {
if (Math.abs(array1[i] - array2[j]) > 0.001) {
System.out.println("set one and set two are not equal");
} else if (Math.abs(array1[i] - array2[j]) < 0.001) {
System.out.println("set one and set two are equal");
}
}
}
}
}