java - 下面这段代码为什么会出现这个错误?怎么改?求指点?

查看:122
本文介绍了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的情况。

根据你程序的目的,解决方法如下:

  1. 根据参数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];

  1. 将n传递给lan和sum方法

PS: 题主典型的面向过程编程, 将java当c用,无语也。。。

这篇关于java - 下面这段代码为什么会出现这个错误?怎么改?求指点?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆