Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将内容从void方法保存到变量_Java_File_Methods_Io - Fatal编程技术网

Java 将内容从void方法保存到变量

Java 将内容从void方法保存到变量,java,file,methods,io,Java,File,Methods,Io,我试图打印并将内容从void方法写入文件,但我似乎无法使其工作。我在main中调用我的方法,它可以很好地打印到控制台。我尝试过许多不同的方法,但没有一种有效。有人能帮我/指引我正确的方向吗 我在下面粘贴了我的代码以供参考。在我的主要函数中,我调用dijkstra(M,SV-1)将数组打印到屏幕上,我的目标是将相同的数组打印到文件中 import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileW

我试图打印并将内容从void方法写入文件,但我似乎无法使其工作。我在main中调用我的方法,它可以很好地打印到控制台。我尝试过许多不同的方法,但没有一种有效。有人能帮我/指引我正确的方向吗

我在下面粘贴了我的代码以供参考。在我的主要函数中,我调用dijkstra(M,SV-1)将数组打印到屏幕上,我的目标是将相同的数组打印到文件中

import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.util.Scanner;

public class Main_2 {
    static int SV = 0; // source vertex
    static int N = 0;
    static int M[][];
    public static int distance[];

    static int minDistance(int dist[], Boolean shortestPath[]) {
        int min = Integer.MAX_VALUE, minI = -1;
        for (int i = 0; i < N; i++)
            if (shortestPath[i] == false && dist[i] <= min) {
                min = dist[i];
                minI = i;
            }
        return minI;
    }

    public static void printArr(int dist[], int n) {
//      System.out.println("vertex        distance");
        for (int i = 0; i < N; i++)
            System.out.println("[" + dist[i] + "]");
    }

    public static void dijkstra(int graph[][], int src) {
        // The output array. dist[i] will hold
        // the shortest distance from src to i
        int dist[] = new int[N];
        // sptSet[i] will true if vertex i is included in shortest
        // path tree or shortest distance from src to i is finalized
        Boolean shortestPath[] = new Boolean[N];

        // Initialize all distances as INFINITE and stpSet[] as false
        for (int i = 0; i < N; i++) {
            dist[i] = Integer.MAX_VALUE;
            shortestPath[i] = false;
        }

        // Distance of source vertex from itself is always 0
        dist[src] = 0;

        // Find shortest path for all vertices
        for (int i = 0; i < N - 1; i++) {
            // Pick the minimum distance vertex from the set of vertices
            // not yet processed. u is always equal to src in first
            // iteration.
            int u = minDistance(dist, shortestPath);

            // Mark the picked vertex as processed
            shortestPath[u] = true;

            // Update dist value of the adjacent vertices of the
            // picked vertex.
            for (int j = 0; j < N; j++)

                // Update dist[v] only if is not in sptSet, there is an
                // edge from u to v, and total weight of path from src to
                // v through u is smaller than current value of dist[v]
                if (!shortestPath[j] && graph[u][j] != 0 && dist[u] != Integer.MAX_VALUE
                        && dist[u] + graph[u][j] < dist[j])
                    dist[j] = dist[u] + graph[u][j];
        }

        // print the constructed distance array
        printArr(dist, N);


    }

    public static void main(String[] args) {
        try {
            int i = 0, j = 0; // counters
            FileInputStream textFile = new FileInputStream("EXAMPLE(2).txt"); // name of input file must go in here
            Scanner scan = new Scanner(textFile);
            N = scan.nextInt(); // read in the size
            String flush = scan.nextLine(); // gets rid of linefeed
            System.out.println(N);
            M = new int[N][N]; // instantiates array
            // this loop reads in matrix from input file
            String line;
            while (i < N && (line = scan.nextLine()) != null) {
                j = 0;
                String delim = " ";
                String tokens[] = line.split(delim);
                for (String a : tokens) {
                    M[i][j] = Integer.parseInt(a);
                    j++;
                }
                i++;
            }
            if (i > N)
                ;
            SV = scan.nextInt();
        } catch (Exception e) {
            e.printStackTrace();
        }

        printMatrix(M);
        System.out.println(SV);
        System.out.println();
        dijkstra(M, SV - 1);

        try {
            FileWriter fw = new FileWriter("Shortest_path.txt"); // writes transitive closure to file
            BufferedWriter bw = new BufferedWriter(fw);
            for (int i = 0; i < N; i++) {
//              bw.write(dist[i]);
            }

        } catch (Exception e) {
            System.out.println(e);
        }
    }

    public static void printMatrix(int[][] Matrix) {
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                System.out.print(Matrix[i][j]);
                System.out.print(" ");

            }
            System.out.println();
        }

    }

}
导入java.io.BufferedWriter;
导入java.io.FileInputStream;
导入java.io.FileWriter;
导入java.util.Scanner;
公共课主课2{
静态int SV=0;//源顶点
静态int N=0;
静态int M[][];
公共静态整数距离[];
静态int minDistance(int dist[],布尔最短路径[]){
int min=Integer.MAX_值,minI=-1;
对于(int i=0;i
试试(FileWriter FileWriter=newfilewriter(“YourFileName.txt”);
PrintWriter PrintWriter=新的PrintWriter(fileWriter)){
对于(int i=0;i“一个”简单的解决方案是将要使用的
PrintStream
传递给方法,例如

public static void printArr(int dist[], int n, PrintStream ps) {
    for (int i = 0; i < N; i++) {
        ps.println("[" + dist[i] + "]");
    }
}
然后您只需创建要使用的
PrintStream
的实例,并将其传递给方法

public static void main(String[] args) {
    try (FileInputStream textFile = new FileInputStream("EXAMPLE(2).txt")) {
        int i = 0, j = 0; // counters
        Scanner scan = new Scanner(textFile);
        N = scan.nextInt(); // read in the size
        String flush = scan.nextLine(); // gets rid of linefeed
        System.out.println(N);
        M = new int[N][N]; // instantiates array
        // this loop reads in matrix from input file
        String line;
        while (i < N && (line = scan.nextLine()) != null) {
            j = 0;
            String delim = " ";
            String tokens[] = line.split(delim);
            for (String a : tokens) {
                M[i][j] = Integer.parseInt(a);
                j++;
            }
            i++;
        }
        if (i > N)
            ;
        SV = scan.nextInt();

        try (PrintStream ps = new PrintStream("EXAMPLE(2).txt")) {
            printMatrix(M);
            System.out.println(SV);
            System.out.println();
            dijkstra(M, SV - 1, ps);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

}

它会再次将输出打印到控制台:)

通过方法参数
dijkstra
将输出写入流中,然后依次调用
printArr
(这就是您实际打印
的地方)。您可以将另一个文件传递给
dijkstra
,然后依次传递给
printArr
。我将打印流传递给dijkstra方法
public static void dijkstra(int-graph[],int-src,PrintStream-output
),并将
System.out改为output.print(printArr(dist,N)
,但它给了我一个错误。有什么想法吗?
public static void dijkstra(int graph[][], int src, PrintStream ps) {
    //...

    // print the constructed distance array
    printArr(dist, N, ps);

}
public static void main(String[] args) {
    try (FileInputStream textFile = new FileInputStream("EXAMPLE(2).txt")) {
        int i = 0, j = 0; // counters
        Scanner scan = new Scanner(textFile);
        N = scan.nextInt(); // read in the size
        String flush = scan.nextLine(); // gets rid of linefeed
        System.out.println(N);
        M = new int[N][N]; // instantiates array
        // this loop reads in matrix from input file
        String line;
        while (i < N && (line = scan.nextLine()) != null) {
            j = 0;
            String delim = " ";
            String tokens[] = line.split(delim);
            for (String a : tokens) {
                M[i][j] = Integer.parseInt(a);
                j++;
            }
            i++;
        }
        if (i > N)
            ;
        SV = scan.nextInt();

        try (PrintStream ps = new PrintStream("EXAMPLE(2).txt")) {
            printMatrix(M);
            System.out.println(SV);
            System.out.println();
            dijkstra(M, SV - 1, ps);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

}
dijkstra(M, SV - 1, System.out);