java - 下面这段代码为什么会出现这个错误?怎么改?求指点?
本文介绍了java - 下面这段代码为什么会出现这个错误?怎么改?求指点?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
/**
* Created by guchenghao on 16/3/5.
*/
import java.util.Scanner;
public class lagrange {
public static int sum(int x[],int y[],int m ) {
int s = 0;
int j = 0;
int h = 0;
while (j < y.length){
h = lan(x,m,j);
s += y[j]*h;
j++;
}
return s;
}
public static int lan(int x[],int m,int j) {
int i;
int h = 1;
for (i = 0; i < x.length; i++) {
if ( i == j) {
continue;
} else {
h = h * ((m - x[i]) / (x[j] - x[i]));
}
}
return h;
}
public static void main(String[] args) {
int[] x = new int[100];
int[] y = new int[100];
Scanner scan = new Scanner(System.in);
System.out.println("请输入组数:");
int n = scan.nextInt();
System.out.println("请输入插值基函数中未知量:");
int m = scan.nextInt();
System.out.println("请给X和Y两个数组赋初值:");
for (int i = 0; i < n; i++) {
System.out.println("请给X赋值:");
x[i] = scan.nextInt();
System.out.println("请给Y赋值:");
y[i] = scan.nextInt();
}
int sumup;
sumup = sum(x,y,m);
System.out.println("插值基函数所得的结果为:" + sumup);
}
}
解决方案
int[] x = new int[100];
int[] y = new int[100];
while (j < y.length){
h = lan(x,m,j);
s += y[j]*h;
j++;
}
for (i = 0; i < x.length; i++) {
if ( i == j) {
continue;
} else {
h = h * ((m - x[i]) / (x[j] - x[i]));
}
}
你先声明了100个元素的数组x,y,java 默认初始化都是0的,然后只赋值了前两个。但是在lan方法(i < x.length)和sum方法里(j < y.length)循环读取所有的值,用x[j] - x[i]肯定会出现 0-0的情况。
根据你程序的目的,解决方法如下:
根据参数n动态什么数组
Scanner scan = new Scanner(System.in);
System.out.println("请输入组数:");
int n = scan.nextInt();
System.out.println("请输入插值基函数中未知量:");
int m = scan.nextInt();
int[] x = new int[n];
int[] y = new int[n];
将n传递给lan和sum方法
PS: 题主典型的面向过程编程, 将java当c用,无语也。。。
这篇关于java - 下面这段代码为什么会出现这个错误?怎么改?求指点?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文