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

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

重復 for 循環但結果不同。我如何刪除重復代碼

重復 for 循環但結果不同。我如何刪除重復代碼

蝴蝶刀刀 2023-06-04 14:52:58
我有重復的 for 循環。一個函數打印到屏幕,另一個函數寫入文件。由于 for 循環相同,但結果不同,我很難找到避免重復的方法??磥磉@個問題接近于回答我自己的問題;然而,據說當打印到屏幕上時,它們可能會出現一些重復,我不確定這里是否是這種情況。如何從我的代碼中刪除重復項private static void printToFile(char space, char hash, int spaceCount, int hashCount){? ? try (PrintWriter outFile = new PrintWriter(new FileWriter("output.txt"))) {? ? ? ? for (int i = 0; i < 8; i++) {? ? ? ? ? ? outFile.write(String.valueOf(marioStepCreator(space, spaceCount)));? ? ? ? ? ? outFile.flush();? ? ? ? ? ? outFile.write(String.valueOf(marioStepCreator(hash, hashCount)));? ? ? ? ? ? outFile.flush();? ? ? ? ? ? outFile.write("\n");? ? ? ? ? ? hashCount++;? ? ? ? ? ? spaceCount--;? ? ? ? }? ? } catch(FileNotFoundException e) {? ? ? ? e.getCause();? ? } catch (IOException e) {? ? ? ? e.printStackTrace();? ? }}private static void printToScreen(char space, char hash, int spaceCount, int hashCount){? ? for (int i = 0; i < 8; i++) {? ? ? ? System.out.print(marioStepCreator(space, spaceCount));? ? ? ? System.out.print(marioStepCreator(hash, hashCount));? ? ? ? System.out.println();? ? ? ? hashCount++;? ? ? ? spaceCount--;? ? }}
查看完整描述

5 回答

?
臨摹微笑

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

由于您已經在使用PrintWriter用于寫入文件,因此將通用代碼移至輔助方法:


private static void printToFile(char space, char hash, int spaceCount, int hashCount){

    try (PrintWriter outFile = new PrintWriter(new FileWriter("output.txt"))) {

        printToWriter(outFile, space, hash, spaceCount, hashCount);

    } catch(FileNotFoundException e) {

        e.getCause();

    } catch (IOException e) {

        e.printStackTrace();

    }

}


private static void printToScreen(char space, char hash, int spaceCount, int hashCount){

    PrintWriter out = new PrintWriter(System.out);

    printToWriter(out, space, hash, spaceCount, hashCount);

    out.flush(); // Do not close

}


private static void printToWriter(PrintWriter out, char space, char hash, int spaceCount, int hashCount){

    for (int i = 0; i < 8; i++) {

        out.print(marioStepCreator(space, spaceCount));

        out.println(marioStepCreator(hash, hashCount));

        hashCount++;

        spaceCount--;

    }

}

當然,您真的需要修復printToFile方法中的異常處理。


由于您使用 try-with-resources 立即關閉文件編寫器,因此無需刷新輸出。然而,包裝必須被刷新,以防它正在緩沖,但不應該被關閉,PrintWriter因為System.out我們不想關閉System.out。


查看完整回答
反對 回復 2023-06-04
?
料青山看我應如是

TA貢獻1772條經驗 獲得超8個贊

您可以隔離 for 循環以生成一個 String 消息,該消息可以使用 writer 或 System.out.println 在一行中打印;


private static void printToFile(char space, char hash, int spaceCount, int hashCount){

    try (PrintWriter outFile = new PrintWriter(new FileWriter("output.txt"))) {

        outFile.write(printMessage(space, hash, spaceCount, hashCount));

        outFile.flush();        

    } catch(FileNotFoundException e) {

        e.getCause();

    } catch (IOException e) {

        e.printStackTrace();

    }

}


private static void printToScreen(char space, char hash, int spaceCount, int hashCount){

    System.out.print(printMessage(space, hash, spaceCount, hashCount));

}


private static String printMessage(char space, char hash, int spaceCount, int hashCount) {

    String message = "";


    for (int i = 0; i < 8; i++) {

        message += marioStepCreator(space, spaceCount) + marioStepCreator(hash, hashCount) + "\n";

        hashCount++;

        spaceCount--;

    }


    return message;

}


查看完整回答
反對 回復 2023-06-04
?
一只名叫tom的貓

TA貢獻1906條經驗 獲得超3個贊

你也可以嘗試做這樣的事情 -


private static List<String> getOutput(char space, char hash, int spaceCount, int hashCount) {

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

    for (int i = 0; i < 8; i++) {

        output.add(String.valueOf(marioStepCreator(space, spaceCount)));

        output.add(String.valueOf(marioStepCreator(hash, hashCount)));

        hashCount++;

        spaceCount--;

    }

    return output;

}


private static void printToFileAndScreen(char space, char hash, int spaceCount, int hashCount) {

    try (PrintWriter outFile = new PrintWriter(new FileWriter("output.txt"))) {

        getOutput(space, hash, spaceCount, hashCount).stream().forEach(s ->

        {

            outFile.write(s);

            outFile.flush();

        });

    } catch (FileNotFoundException e) {

        e.getCause();

    } catch (IOException e) {

        e.printStackTrace();

    }

}


private static void printToScreen(char space, char hash, int spaceCount, int hashCount) {

    getOutput(space, hash, spaceCount, hashCount).stream().forEach(s -> System.out.println(s));

}

通過這種方式,您可以將主要業務邏輯與輸出消費者分開。此外,您可以為不同的編寫器實現和連接具有“write()”方法的接口。這種方式很容易編寫測試用例。


查看完整回答
反對 回復 2023-06-04
?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

這個怎么樣:


private static void printToFileAndScreen(char space, char hash, int spaceCount, int hashCount){

    try (PrintWriter outFile = new PrintWriter(new FileWriter("output.txt"))) {

        for (int i = 0; i < 8; i++) {

            String spaceString = String.valueOf(marioStepCreator(space, spaceCount));

            String hashString = String.valueOf(marioStepCreator(hash, hashCount));

            outFile.write(spaceString);

            outFile.write(hashString);

            outFile.write("\n");

            outFile.flush();

            System.out.print(spaceString);

            System.out.print(hashString);

            System.out.println();

            hashCount++;

            spaceCount--;

        }

    } catch(FileNotFoundException e) {

        e.getCause();

    } catch (IOException e) {

        e.printStackTrace();

    }

}


查看完整回答
反對 回復 2023-06-04
?
富國滬深

TA貢獻1790條經驗 獲得超9個贊

這個怎么樣:


private static void printToFile(char space, char hash, int spaceCount, int hashCount) {


    try (PrintWriter outFile = new PrintWriter(new FileWriter("output.txt"))) {

        loop(spaceCount, hashCount, (sCount, hCount) -> {

        outFile.write(String.valueOf(marioStepCreator(space, sCount)));

        outFile.flush();

        outFile.write(String.valueOf(marioStepCreator(hash, hCount)));

        outFile.flush();

        outFile.write("\n");

        });

    } catch (FileNotFoundException e) {

        e.getCause();

    } catch (IOException e) {

        e.printStackTrace();

    }

}


private static void printToScreen(char space, char hash, int spaceCount, int hashCount) {


    loop(spaceCount, hashCount, (sCount, hCount) -> {

        System.out.print(marioStepCreator(space, sCount));

        System.out.print(marioStepCreator(hash, hashCount));

        System.out.println();

    });

}


private static void loop(int spaceCount, int hashCount, final BiConsumer<Integer, Integer> consumer) {


    for (int i = 0; i < 8; i++) {

        consumer.accept(spaceCount, hashCount);

        hashCount++;

        spaceCount--;

    }

}


查看完整回答
反對 回復 2023-06-04
  • 5 回答
  • 0 關注
  • 249 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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