亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

迭代和掃描未按預期工作

迭代和掃描未按預期工作

斯蒂芬大帝 2021-08-25 15:10:49
我正在嘗試制作一個解決“推箱子”游戲的程序,所以我目前要做的是讀取文本文件,創建一個二維數組,將每個字符放入該二維數組(包括空格)。這就是我現在正在做的事情,我的文本文件目前看起來像:#########   # .##   $$.#####   #   #@ ##   ####我的代碼目前如下所示:package soko;import java.util.*;import java.io.*;public class Dowork {    File file;    Scanner sc;    char a;    static int lines;    Scanner lineScanner;    static int maxChar;    ArrayList array;    char[][] array2;    Scanner bc;    int n;    int m;    public Dowork() throws Exception{        int n=0;        int m=0;        file = new File("C:/Users/joaki/Desktop/sokoban/readin.txt");        sc = new Scanner(file);        sc.reset();        sc.useDelimiter("s*");        ArrayList<Character> array = new ArrayList<Character>();        while(sc.hasNext()) {            String line = sc.next();            maxChar = line.length();            if(maxChar < line.length()) {                maxChar = line.length();            }            for (char ch:line.toCharArray()) {                array.add(ch);            }            if(sc.hasNextLine()) {                lines++;            }        }        sc.close();        array2 = new char[lines][maxChar];        Iterator<Character> itemIterator = array.iterator();            while(itemIterator.hasNext()) {                itemIterator.next();                for (int q = 0; q < lines; q++) {                    for(int r = 0; r < maxChar; r++) {                        Character j = itemIterator.next();                        array2[q][r] = itemIterator.next();                    }                }            }            for (int q = 0; q < lines; q++) {                for(int r = 0; r < maxChar; r++) {                    System.out.println(array2[q][r]);                }            }        }    public static void main(String[] args) throws Exception{        Dowork g = new Dowork();    }}另一方面,我的第一個輸入是:#######...顯然應該有 9 # 但我只得到 7,我懷疑我的 itemIterator 有問題,但我不能說。有任何想法嗎?
查看完整描述

2 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

在我看來,您在某些事情上做得太過分了。假設您知道如何讀取文件。為了簡化一些事情,我跳過了實際閱讀.txt. 相反,我宣布String像你的例子。然后,我逐行讀取字符串并將該字符串存儲在 2D 中List。我希望代碼是不言自明的,并且易于將結果轉換為二維數組(如果必須的話)。


public class Answer1 {


    static final String input =

            "########\n" +

            "#   # .#\n" +

            "#   $$.#\n" +

            "####   #\n" +

            "   #@ ##\n" +

            "   ####";



    public static void main(String[] args) {


        List<List<String>> grid = new ArrayList<>();

        for(String line: input.split("\n")){

            List<String> row = new ArrayList<>();

            row.add(line);

            grid.add(row);

        }


        //test

        System.out.println(grid);


    }

}


查看完整回答
反對 回復 2021-08-25
?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

就在String line = sc.next();you have 之后maxChar = line.length();,這意味著if(maxChar < line.length())緊接其后的條件永遠不會滿足。在while(sc.hasNext())塊的末尾,變量maxChar將只包含最后一行的長度,實際上似乎是 7。

順便說一句,我認為您希望條件為if(maxChar > line.length()),如果您的意圖是(正如我懷疑的那樣)maxChar在您的拼圖文件中包含一行的最大長度。


查看完整回答
反對 回復 2021-08-25
  • 2 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號