0

Cookie のリストを取得し、既に持っている新しい文字列を連結して値を変更しようとしています。これが私のコードです:

    String color = request.getParameter("color");
    Cookie cookies[] = request.getCookies(); // get client's cookies;
    String cn;
    String cv;

    if ( cookies.length != 0 ) { 
        // get the name of each cookie
        for ( int i = 0; i < cookies.length; i++ ) 
            cn = cookies[ i ].getName();
            cv = cookies[ i ].getValue();
            cv = cv.concat(color);
            cookies[i].setValue(cv);
            response.addCookie(cookies[i]);

でエラーが表示されcn = cookies[ i ].getName();ます エラーはcannot find symbolであり、 を示していiます。何故ですか?誰でも助けることができますか?

4

3 に答える 3

2

for ループには中括弧がありません。これは、forループの定義の下の最初の行のみが実際にループの一部であることを意味します。その結果、後続の行はi、スコープ内に存在しない変数を参照します (forループのスコープ内にのみ存在するため)。

たとえば、この例では、最初の印刷メソッドは次の場合にのみ呼び出されますsomeValue == 123.。ただし、2 番目の印刷メソッドはステートメント内にないため、常に呼び出されます。if

if(someValue == 123)
    System.out.println("This number equals 123");
    System.out.println("This number is greater than 122");

ただし、この例では、両方の呼び出しがifステートメント内にあるため、どちらも次の場合にのみ呼び出されます。someValue == 123:

if(someValue == 123){
    System.out.println("This number equals 123");
    System.out.println("This number is greater than 122");
}

また、if(cookies.length != 0)for ループ ( ) 内の条件は、i < cookies.lengthI が 0 から始まるため、常にこれをカバーするため、不要です。

これを試して:

for(int i = 0; i < cookies.length; i++){
    cn = cookies[ i ].getName();
    cv = cookies[ i ].getValue();
    cv = cv.concat(color);
    cookies[i].setValue(cv);
    response.addCookie(cookies[i]);
}
于 2015-11-24T19:28:42.770 に答える
-2

配列インデックスを使用して Cookie にアクセスすることはできません

 Cookie[] cookies = request.getCookies();

String userId = null;
for(Cookie cookie : cookies)
{
    if("uid".equals(cookie.getName()))
{
        userId = cookie.getValue();
    }
}
于 2015-11-24T19:05:06.507 に答える