java课遇到了问题 各位可以给我看看吗

//https://blog.csdn.net/wangqiuyun/article/details/12838903#

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;
import java.util.Calendar;
public class GA {

private int scale;// 种群规模
private int cityNum; // 城市数量,染色体长度
private int MAX_GEN; // 运行代数
private int[][] distance; // 距离矩阵
private int bestT;// 最佳出现代数
private int bestLength; // 最佳长度
private int[] bestTour; // 最佳路径
private int[] x;
private int[] y;

// 初始种群,父代种群,行数表示种群规模,一行代表一个个体,即染色体,列表示染色体基因片段
private int[][] oldPopulation;
private int[][] newPopulation;// 新的种群,子代种群
private int[] fitness;// 种群适应度,表示种群中各个个体的适应度

private float[] Pi;// 种群中各个个体的累计概率
private float Pc;// 交叉概率
private float Pm;// 变异概率
private int t;

private Random random;

public GA() {

}

/**
 * constructor of GA
 * 
 * @param s
 *            种群规模
 * @param n
 *            城市数量
 * @param g
 *            运行代数
 * @param c
 *            交叉率
 * @param m
 *            变异率
 * 
 **/
public GA(int s, int n, int g, float c, float m) {
    scale = s;
    cityNum = n;
    MAX_GEN = g;
    Pc = c;
    Pm = m;
}

// 给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默
@SuppressWarnings("resource")
/**
 * 初始化GA算法类
 * @param filename 数据文件名,该文件存储所有城市节点坐标数据
 * @throws IOException
 */
private void init(String filename) throws IOException {
    // 读取数据
    int[] x;
    int[] y;
    String strbuff;
    BufferedReader data = new BufferedReader(new InputStreamReader(
            new FileInputStream(filename)));
    distance = new int[cityNum][cityNum];
    x = new int[cityNum];
    y = new int[cityNum];
    for (int i = 0; i < cityNum; i++) {
        // 读取一行数据,数据格式1 6734 1453
        strbuff = data.readLine();
        // 字符分割
        String[] strcol = strbuff.split(" ");
        x[i] = Integer.valueOf(strcol[1]);// x坐标
        y[i] = Integer.valueOf(strcol[2]);// y坐标
    }
    // 计算距离矩阵
    // ,针对具体问题,距离计算方法也不一样,此处用的是att48作为案例,它有48个城市,距离计算方法为伪欧氏距离,最优值为10628
    for (int i = 0; i < cityNum - 1; i++) {
        distance[i][i] = 0; // 对角线为0
        for (int j = i + 1; 

img

GA.java 文件 init 方法 81 行,在运行时遇到 null 值调用方法的异常。因为贴出来的代码和行号不匹配,没办法帮你确定是哪一行。你可以检查一下代码,尝试做下判断或看看是不是因为没读取到文件导致的异常。

1 读写文件时,最好不要把异常抛出,用try catch处理
2 67行那个for循环不好,用while,判断只要读取的不是空就一直执行

img

多半是这个null了,因为已经读完了;想楼上说的,读文件一般都是用while的,用for根本没法确定循环次数;要么没读完,要么读超了