Как я могу сохранить ввод File Reader в массиве, а затем сделать графический [Java]? (Вопрос для профессионалов, проверьте сами) - PullRequest
0 голосов
/ 08 января 2019

Я попытался ввести некоторые числа в Java из файла "input1.txt", сохранить их в 3 массивах и создать вершину для графа с этими числами, но это не работает. Возвращает ошибку «Вычислить всплывающую подсказку кнопки запуска». Можете ли вы помочь мне, пожалуйста?

class GraphPanel extends JFrame {


private static final long serialVersionUID = 1L;

    UGraph x;

Конструктор для графики

    public GraphPanel(UGraph x) {
        setTitle("Graph");
        setSize(1500,1500);
        setResizable(true);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.x=x;

    }

Строительный график

    public void paint(Graphics graphic) {
        int knots=x.KnotenList.size() , kants=x.KantenList.size();

        graphic.setColor(Color.RED);

        for(int i=0;i<knots;++i) {//malen der Knoten

            graphic.fillOval(x.KnotenList.get(i).x, x.KnotenList.get(i).y, 8, 8);

        }

        graphic.setColor(Color.BLACK);
        int fromID,toID;
        GKnote from,to;

        for(int i=0;i<kants;++i) {//malen der Kanten

            fromID= x.KantenList.get(i).fromID;
            toID = x.KantenList.get(i).toID;

            from=x.getKnote(fromID);
            to=x.getKnote(toID);

            graphic.drawLine(from.x+4, from.y+4, to.x+4, to.y+4);

        }


    }

Основная функция

    public static void main(String[] args) throws IOException {

        FileReader in = null;

        //UGraph g=new UGraph();
        int [] idlist= new int [100];
        int [] xlist= new int [100];
        int [] ylist= new int [100];
        int insgesamtpunkte=0;

Ввод файла и место, где происходит ошибка

         try {
             in = new FileReader("input1.txt");

             int tmp=0,satind=1,spaceanzahl=0,gfid=0,gfx=0,gfy=0;
             char c;

             while ((c = (char) in.read()) != ';') {


                if(c>='0' && c<='9') {//constructs a Number
                  tmp+=c-'0';
                  tmp*=10;
                }

                else if(c==' ') {
                  tmp/=10;

                  switch(satind++) {
                    case 1: gfid=tmp;
                    case 2: gfx=tmp;
                    case 3: gfy=tmp;
                  }
                  tmp=0;
                  if(++spaceanzahl==3) {

                      //System.out.println(gfid+"|"+gfx+"|"+gfy);

                      //Saving Ints in Arrays

                      idlist[insgesamtpunkte]=gfid;
                      xlist[insgesamtpunkte]=gfx;
                      ylist[insgesamtpunkte++]=gfy;

                      spaceanzahl=0;
                      satind=1;
                      tmp=0;

                      while ((c = (char) in.read()) == ' ') if(c==';') break;

                      if(c>='0' && c<='9') {//constructs a Number
                          tmp+=c-'0';
                          tmp*=10;
                        }
                    }



                }


             }

          }
         finally {
             if (in != null) {
                in.close();
             }
          }

Добавление вершины из массивов

        for(int i=0;i<insgesamtpunkte;++i) 
            g.addKnote(idlist[i],xlist[i],ylist[i]);

Добавление вершин и ребер вручную

         g.addKnote(32,223,341);
         g.addKante(2, 14, 12);
         g.addKante(3, 14, 32);

Создание графики

         new GraphPanel(g);


    }

}

Содержимое файла:

14 321 544 12 443 234;

1 Ответ

0 голосов
/ 10 января 2019

Вы можете легко прочитать ввод из файла, используя Java 8+, как показано ниже:

 int numbers[] = Files.lines(Paths.get("input1.txt"))
            .map(line -> line.split(" "))
            .flatMap(Arrays::stream)
            .mapToInt(Integer::parseInt)
            .toArray();

Теперь numbers массив содержит все целые числа из входного файла. Вы можете использовать его для создания 3 необходимых вам массивов.

...