Как я могу хранить данные из цикла while в массиве? - PullRequest
0 голосов
/ 06 июня 2019

Мне нужно хранить данные, собранные с помощью сканера, из TXT-файла с циклом while.Строки в .txt содержат координаты x, y, z и значение c.Мне удалось разделить строки из .txt и преобразовать их в числа, но я не могу получить их вне цикла, чтобы работать с ними оттуда.Я хочу использовать координаты "x-" и "y-" и значение c, которое будет использоваться в двумерном массиве "z65".

import java.io.File;  
import java.util.Arrays;  
import java.util.Scanner;  
import java.util.regex.Pattern;  
import gdi.ct.CtImage ;

public class CtViewer {  
 public static void main(String[] args)   
   throws java.io.FileNotFoundException    
 {

  int x;  
  int y;  
  int z;  
  int c;  
  int xValue;  
  int yValue;  
  int zValue;  
  int cValue;

  int [] [] [] ct = new int [204] [204] [139];

  for ( x = 0; x < 204; x++) {  
   for ( y = 0; y < 204; y++) {  
    for ( z = 0; z < 139; z++) {  
     ct[x][y][z] =  -1000; }}}  
  System.out.println(ct [0] [0] [0]);  
  System.out.println(ct [0] [0] [1]);

  File cTxt = new File("CT-Chest.txt");  
  Scanner readTxt = new Scanner(cTxt);

  while(readTxt.hasNextLine()) {  
   String i = readTxt.nextLine();

   String [] out = i.split(" ");

   xValue = Integer.parseInt(out[0]);  
   yValue =Integer.parseInt(out[1]);  
   zValue= Integer.parseInt(out[2]);  
   cValue =Integer.parseInt(out[3]);


   x =xValue;  
   y=yValue;  
   z=zValue;  
   c = cValue;  
   System.out.println(x+ "" +y+"" +z+ ""+c);    //Works 'till     here.  
   ct [x] [y][z] = c;


  }  
   System.out.println(x+""+y);  
  int[] [] z65 = new int [x] [y];  
  CtImage cI = new CtImage(z65);







 }  
 }  

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Если кому-то понадобится решение этой проблемы в будущем, вот что я разработал.

        import java.io.File;
        import java.util.Arrays;
        import java.util.Scanner;
        import java.util.regex.Pattern;
        import gdi.ct.CtImage;

        public class CtViewer {
            public static void main(String[] args) throws java.io.FileNotFoundException {

                int x;
                int y;
                int z;
                int c;
                int[][][] ct = new int[204][204][139];

                for (x = 0; x < 204; x++) {
                    for (y = 0; y < 204; y++) {
                        for (z = 0; z < 139; z++) {
                            ct[x][y][z] = -1000;
                        }
                    }
                }

                File cTxt = new File("CT-Chest.txt");
                Scanner readTxt = new Scanner(cTxt);
                int[][] z65 = new int[204][204];
                do {
                    String i = readTxt.nextLine();
                    String[] out = i.split(" ");

                    int xValue = Integer.parseInt(out[0]);
                    int yValue = Integer.parseInt(out[1]);
                    int zValue = Integer.parseInt(out[2]);
                    ct[xValue][yValue][zValue] = Integer.parseInt(out[3]);
                    if (zValue == 65) {
                        xValue = Integer.parseInt(out[0]);
                        yValue = Integer.parseInt(out[1]);
                        zValue = Integer.parseInt(out[2]);
                        z65[xValue][yValue] = Integer.parseInt(out[3]);
                    }
                }
                while (readTxt.hasNextLine());
                CtImage cI = new CtImage(z65);


                readTxt.close();
            }


        }
0 голосов
/ 06 июня 2019

вы переписали свои переменные цикла. сделай так

  x =xValue;  //delete all this
 y=yValue;  
 z=zValue;  
 c = cValue;/// to here
System.out.println(x+ "" +y+"" +z+ ""+c);    //Works 'till     here.  
ct [xValue] [yValue][zValue] = cValue;  

вот как я смог это сделать:

int[][][] ct = new int[204][204][139];
    for (int x = 0; x < 204; x++) {
        for (int y = 0; y < 204; y++) {
            for (int z = 0; z < 139; z++) {
                ct[x][y][z] = -1000;
            }
        }
    }
    File file = new File(ClassLoader.getSystemResource("CT-Chest.txt").getFile());
    List<String> lines = Files.readAllLines(file.toPath());
    lines.stream().filter(s->!s.trim().isEmpty()).forEach(s->{
        String[] split = s.split(" ");
        ct[Integer.parseInt(split[0])][Integer.parseInt(split[1])][Integer.parseInt(split[2])]=Integer.parseInt(split[3]);
    });
    System.out.println(ct[5][8][99]);

и содержимое файла, который я создал:

5 8 99 2
6 203 138 2000
203 1 88 135

вывод программы равен 2.

Возможно ли, что вы пытаетесь использовать другой метод? ct и все значения, считанные из файла, будут доступны с этого момента. я получаю строки из файла немного по-другому, но это не должно иметь значения.

...