第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

如何在 Java 中從堆棧接收上一行文本

如何在 Java 中從堆棧接收上一行文本

拉丁的傳說 2022-08-03 10:28:44
我目前正在為代碼而苦苦掙扎。問題主要發(fā)生在陣列和嘗試回訪時。此文件只需要一個 main 方法,該方法執(zhí)行以下操作,直到用戶輸入“quit”:? 提示用戶輸入要訪問、返回(僅在可能的情況下)或退出的 URL?訪問并顯示輸入的URL?返回并顯示以前訪問過的URL(如果可能)? 如果用戶在沒有要返回的頁面時輸入“后退”,則應(yīng)顯示相應(yīng)的消息。下面是一個輸出示例:輸入網(wǎng)址或“退出”:返回沒有要返回的網(wǎng)址輸入網(wǎng)址或“退出”:http://www.wwe.com當前網(wǎng)址:http://www.wwe.com輸入網(wǎng)址或“退出”:返回沒有要返回的網(wǎng)址當前網(wǎng)址:http://www.wwe.com輸入網(wǎng)址或“退出”:http://www.amazon.com當前網(wǎng)址:http://www.amazon.com輸入網(wǎng)址“后退”或“退出”:http://www.google.com當前網(wǎng)址:http://www.google.com輸入網(wǎng)址“后退”或“退出”:后退當前網(wǎng)址:http://www.amazon.com輸入網(wǎng)址“后退”或“退出”:后退當前網(wǎng)址:http://www.wwe.com輸入網(wǎng)址或“退出”:退出
查看完整描述

3 回答

?
繁華開滿天機

TA貢獻1816條經(jīng)驗 獲得超4個贊

使用 Stack 類而不是 ArrayList 會讓你的生活更輕松。


使用 push() 將新的 url 添加到堆棧。


使用 empty() 檢查是否可以返回。


使用 pop() 返回。


編輯 - 支持轉(zhuǎn)發(fā)


如果您還想支持“轉(zhuǎn)發(fā)”comand,則可以使用第二個堆棧,并將從該轉(zhuǎn)發(fā)堆棧上的歷史堆棧中彈出的URL推送。輸入“forward”命令時,檢查正向堆棧是否為空,如果沒有,請從那里彈出 url 并將其推送回歷史記錄堆棧。


編輯 2 - 示例代碼


以下是一些基本代碼來解釋 2 堆棧解決方案:


Stack<String> historyStack = new Stack<>();

Stack<String> forwardStack = new Stack<>();

String currentUrl = null;


boolean running = true;

while(running) {

    String input = getUserInput();

    switch(input) {

        case "quit":

            running = false;

            break;

        case "back":               

            if (!historyStack.empty()) {

                if (currentUrl != null) {

                    forwardUrl.push(currentUrl);

                }

                currentUrl = historyStack.pop();

                System.out.println(currentUrl);

            } else {

                System.out.println("nothing to go back to");

            }

            break;

        case "forward":

            if (!forwardStack.empty()) {

                if (currentUrl != null) {

                    historyStack.push(currentUrl);

                }

                currentUrl = forwardStack.pop();

                System.out.println(url);

            } else {

                System.out.println("nothing to go forward to");

            }

            break;

        default:

            if (currentUrl != null) {

                historyStack.push(currentUrl);

            }

            currentUrl = input;

            System.out.println(url);

            // entering a new url makes forward stack invalid

            forwardStack.clear();

    }

}


查看完整回答
反對 回復(fù) 2022-08-03
?
瀟瀟雨雨

TA貢獻1833條經(jīng)驗 獲得超4個贊

您可以將邏輯更改為如下所示:


ArrayList<String> webs = new ArrayList<String>();

String web = "";

Scanner url = new Scanner(System.in);


int count = 0;

while (!web.contains("quit")) {

    System.out.println("Enter a URL or \"quit\":");

    web = url.next();

    if (!web.equals("back")) {

        webs.add(web);

        count = webs.size();

    } else if (web.equals("back") && !webs.isEmpty()) {

        if (count > 0) {

            count--;

            System.out.println(webs.get(count));

        } else {

            System.out.println("No url to go back to");

        }

    }

}

請注意以下幾點:

  1. 我們只添加不等于 back 的字符串

  2. 在之前的實現(xiàn)中,輸入的第一個 URL 未插入到列表中。

  3. 將元素添加到列表后,計數(shù)將重置為列表的大小。


正如其他人所指出的那樣,通過使用堆棧可以更容易地實現(xiàn)相同的目標。

Scanner url = new Scanner(System.in);

String web = "";

Stack<String> myStack = new Stack<>();

while (!web.contains("quit")) {

    System.out.println("Enter a URL or \"quit\":");

    web = url.next();

    if (!web.equals("back") && !web.equals("quit")) {

        myStack.push(web);

    } else {

        if (!myStack.isEmpty()) {

            System.out.println(myStack.pop());

        } else {

            System.out.println("No url to go back to");

        }

    }

}


查看完整回答
反對 回復(fù) 2022-08-03
?
幕布斯6054654

TA貢獻1876條經(jīng)驗 獲得超7個贊

您使用了不正確的數(shù)據(jù)結(jié)構(gòu)。 是可以的,但在這里使用更正確:你添加到末尾并從末尾檢索,這個id LIFO。ListStack


private static final String QUIT = "quit";

private static final String BACK = "back";


try (Scanner url = new Scanner(System.in)) {

    Deque<String> stack = new LinkedList<>();


    while (true) {

        System.out.print("Enter a URL, \"" + BACK + "\" or \"" + QUIT + "\": ");

        String str = url.next();


        if (str.equalsIgnoreCase(QUIT))

            break;

        else if (str.equalsIgnoreCase(BACK)) {

            if (!stack.isEmpty())

                stack.pop();

            System.out.println(stack.isEmpty() ? "No URL to go back to" : stack.element());

        } else

            stack.push(str);

    }

}

演示


Enter a URL, "back" or "QUIT": http://www.wwe.com

Enter a URL, "back" or "QUIT": http://www.amazon.com

Enter a URL, "back" or "QUIT": http://www.google.com

Enter a URL, "back" or "QUIT": back

http://www.amazon.com

Enter a URL, "back" or "QUIT": back

http://www.wwe.com

Enter a URL, "back" or "QUIT": back

No URL to go back to

Enter a URL, "back" or "QUIT": quit


查看完整回答
反對 回復(fù) 2022-08-03
  • 3 回答
  • 0 關(guān)注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號