问题描述
使用函数完成以下功能,并得到一个完整的可以运行的程序:
1)定义两个数组,用来表示下列关系表:
水位 库容
112 5656
115 5954
113 5703
110 5500
111 5642
114 5841
2)将两个数组分别按从小到大排序
3)输入任意一个水位,计算对应库容
4)输入任意库容,计算水位
(注:使用插值法计算,比如水位输入112.6,首先查询到112和113米水位
对应的库容5656和5703,然后计算比例=112.6-112=0.6,最后结果就是0.6 * (5703-5656) + 5656)
代码实现
package JavaMiddleTest;//包名(可修改)
public class QuestionTwo {
public static void main(String[] args) {
//1.数组表示信息
double[] waterHeight = {112, 115, 113, 110, 111, 114};
double[] calculate = {5656, 5954, 5703, 5500, 5642, 5841};
//2.分别排序
sort(waterHeight); //水位
sort(calculate); //库容
for (int i = 0; i < waterHeight.length; i++) {
System.out.print(waterHeight[i] + " ");
}
System.out.println();
for (int i = 0; i < calculate.length; i++) {
System.out.print(calculate[i] + " ");
}
System.out.println();
//3.计算水位对应的库容
System.out.println("库容为:" + calculateDiffValue(113.6,waterHeight,calculate));
//4.计算库容对应的水位
System.out.println("水位为:" + waterHeightDiffValue(5710,waterHeight,calculate));
}
//2.两个数组分别按 从小到大 排序
public static double[] sort(double[] array) {
double temp = 0;
//冒泡排序
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length - 1 - i; j++) {
if (array[j] >= array[j + 1]) {
temp = array[j + 1];
array[j + 1] = array[j];
array[j] = temp;
}
}
}
return array;
}
//方法3-水位对应的库容
//索引查找输入的水位下界水位值,返回下界水位在数组中的下标
public static int findIndex(double value,double[] source){
for (int i = 0;i < source.length; i++) {
if(value < source[i]){
return i-1;
}
}
return -1; //超出
}
//插值法-计算库容
public static double calculateDiffValue(double value,double[] waterHeight,double[] calculate) {
//value输入的水位值
//waterHeight水位数组
//calculate库容数组
int index = findIndex(value,waterHeight); //查找输入的水位的下界水位在数组中的下标
return ((value - waterHeight[index]) / (waterHeight[index+1] - waterHeight[index]))* (calculate[index+1] - calculate[index]) + calculate[index];
}
//方法4-输入任意库容,计算水位
//插值法-计算水位
public static double waterHeightDiffValue(double value,double[] waterHeight, double[] calculate){
//索引查找输入的库容下界库容值,返回下界库容在数组中的下标
int index = findIndex(value,calculate);
return (value - calculate[index]) / (calculate[index+1] - calculate[index]) * (waterHeight[index+1] - waterHeight[index]) + waterHeight[index];
}
}
运行结果