Что “лучший” путь состоит в том, чтобы получить и установить единственное значение cookie с помощью JavaScript

Что происходит, то условие для вас, когда цикл равен

while (!command.equalsIgnoreCase("quit"))

, что по-английски означает, что, если команда не равна «выход», запустите этот цикл.

Внутри цикла команда никогда не устанавливается на «выход». Например, если я задаю входную строку как «abcde» и прошу удалить «c» в позиции 1. Затем ваша логика устанавливает здесь команду «удалить»

command = keyboard.nextLine();

, а затем выводит окончательное значение как «abde» , Теперь, когда цикл заканчивается, команда все еще «удаляет» и, следовательно, цикл выполняется снова.

Возможное решение - явно спросить пользователя, хочет ли он повторить попытку, используя цикл do while. Также просто совет, я вижу, что вы использовали nextInt. Желательно использовать nextLine сразу после следующего int. посмотрите на это по следующей причине: Java Scanner не ожидает ввода данных пользователем

, это то, что вы кодировали бы, если бы вы явно приняли согласие пользователя, если вы хотите выполнить больше команд:

public static void main (String[] args) throws java.lang.Exception
    {
    Scanner keyboard = new Scanner(System.in);
        // Output Variables
        String userInput = "";

        // Variables
        String removeChar = "", removeAllChar = "";
        int removeIndex = 0;

        // First Output
        System.out.println("Enter the string to be manipulated");
        userInput = keyboard.nextLine();
        String command = "";
        String retry = "";
        // While loop
        do {
            // Output
            System.out.println("Enter your command (reverse, replace first, replace last, remove all, remove)");
            command = keyboard.nextLine();
            if (command.equalsIgnoreCase("remove")) {
                System.out.println("Enter the character to remove");
                removeChar = keyboard.nextLine();
                int totalCount = 0;
                for (int j = 0; j < userInput.length(); j++) {
                    if (userInput.charAt(j) == removeChar.charAt(0)) {
                        totalCount = totalCount + 1;
                    }
                }
                System.out.println("Enter the " + removeChar
                        + " you would like to remove (Not the index - 1 = 1st, 2 = 2nd, etc.):");
                removeIndex = keyboard.nextInt();
                keyboard.nextLine();
                int currentIndex = 1;
                if (removeIndex <= totalCount) {
                    for (int i = 0; i < userInput.length(); i++) {
                        if (userInput.charAt(i) == removeChar.charAt(0)) {
                            if (currentIndex == removeIndex) {
                                String firstpartOfString = userInput.substring(0, i);
                                String secondpartOfString = userInput.substring(i + 1, userInput.length());
                                System.out.println("The new sentence is " + firstpartOfString + secondpartOfString);
                                userInput = firstpartOfString + secondpartOfString;
                                break;
                            } else {
                                currentIndex = currentIndex + 1;
                            }
                        }
                    }
                } else {
                    System.out.println("Can't find " + removeChar + " occuring at " + removeIndex + " int the string.");
                }
                // Remove All Code

            } else if (command.equalsIgnoreCase("remove all")) {
                System.out.println("Enter the character to remove");
                removeAllChar = keyboard.next();
                String newString = "";
                for (int i = 0; i < userInput.length(); i++) {
                    if (userInput.charAt(i) != removeAllChar.charAt(0)) {
                        newString = newString + userInput.charAt(i);
                    }
                }
                userInput = newString;
                System.out.println("The new sentence is " + userInput);

            }
            System.out.println("Do you want to go again?");
            retry = keyboard.nextLine();
            // Bracket for while loop
        }while("yes".equalsIgnoreCase(retry));
    }

16
задан Matthew Schinckel 4 November 2008 в 03:26
поделиться

2 ответа

Украденный от http://www.quirksmode.org/js/cookies.html#script

function createCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toUTCString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name,"",-1);
}

использование его:

var oldCount = parseInt(readCookie('hitCount'), 10) || 0;
createCookie('hitCount', oldCount + 1, 7);

, как указано в комментариях, необходимо бросить к интервалу, так как cookie хранятся и возвращаются как строки. Используя foo++ или ++foo на самом деле бросит для Вас, но более безопасно знать точно, с чем Вы работаете:

var x = "5";  // x = "5" (string)
x += 1;       // x = "51" (string!)
x += 5;       // x = "515" (string!)
++x;          // x = 516 (number)
30
ответ дан 30 November 2019 в 16:42
поделиться

Большая часть старой обработки cookie функционирует, я видел, что манипуляции простой строкой использования для хранения получения оценивают, как этот пример, можно пользоваться другими библиотеками, как cookie-js , маленькое (< 100 строк) утилита для доступа cookie.

я лично использую jQuery на своих проектах, и я использую Плагин Cookie jQuery , это действительно просто в использовании:

var cookieName = "increment";

if ($.cookie(cookieName) == null){
  $.cookie(cookieName, 1, { expires: 10 });
}else{
  var newValue = Number($.cookie(cookieName)) + 1;
  $.cookie(cookieName, newValue, { expires: 10 });
}
7
ответ дан 30 November 2019 в 16:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: