質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • Java

    14049questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Eclipse

    1700questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

java チャット 表示件数

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 518

khr0404

score 35

前提・実現したいこと

簡易的なチャットのような物をつくっているのですが、このソースで実行すると投稿され表示された部分の件数が投稿された番号ではなく5.4.3.2.1と表示されている件数分しかでてきません。
どのように訂正したらよいでしょうか。。。
ご教授お願いします。

ChatOutput.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.ArrayList" %>
<%@ page import=".Contribution" %>

<%@ page import=".Chat1" %>


<%ArrayList<Contribution> chatList = (ArrayList<Contribution>) application.getAttribute( "chatList" ); %>
<% %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>チャット</title>
<h1>チャットDAO</h1>
</head>
<body>
<form action="/Test/Chat1" method="post">
名前:<input type="text" name = "Name" value = "" size=20>
<br>
<input type="text" name = "Body" value = "" size=40>
<input type="submit" value=" 投稿 " name="do">
<input type="submit" value=" 再読込 " name="relode">
<br>
表示行数:<input type="number" name="num" value="5" min="1" max="100" step="1">行
<input type="submit" value=" 設定 " name="setting">
</form>

<% int CLS =chatList.size();
 for( int i = 0; i < CLS; i++ ) {%>
<%= (CLS  - i )%><%="  "%><%=chatList.get( CLS - 1 - i ).getName()%><%=":"%><%=chatList.get(CLS - 1 - i ).getBody()%>
<% System.out.println(DLS); %>

<br>
<%}%>
</body>
</html>

Chat1

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/Chat")
public class Chat1 extends HttpServlet {


    private static final long serialVersionUID = 1L;


    public Chat1() {

        super();

    }


    @Override
    protected void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {

        this.doPost( request, response );
    }


    @SuppressWarnings("unchecked")
    @Override
    protected void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {

        response.setContentType( "text/html; charset=UTF-8" );//HTML出力
        request.setCharacterEncoding( "UTF-8" );

        try {
            ServletContext application = this.getServletContext();//ServletContextインスタンスの取得

            ServletConfig sconfig = getServletConfig();
            String primary = sconfig.getInitParameter( "chat" );

            if ( primary == null ) {
                primary = (String) application.getAttribute( "初期値" );
            }

            ChatDataDAOImpl_File CDIF = (ChatDataDAOImpl_File) Class.forName( primary ).newInstance();

            ArrayList<Contribution> chatList = new ArrayList();//ArrayListの生成
            String name = request.getParameter( "Name" );
            String body = request.getParameter( "Body" );


            if ( name != "" && body != "" && name != null && body != null ) {

                CDIF.addContribution( new Contribution( name, body ) );
            }

            int number = 5;
            String num = request.getParameter( "num" );

            if ( num != null ) {
                number = Integer.parseInt( num );
            }
            chatList = CDIF.getContribution( number );

            application.setAttribute( "chatList", chatList );//アプリケーションスコープにインスタンスを保存
            application.setAttribute( "初期値", primary );//アプリケーションスコープにインスタンスを保存
            RequestDispatcher dispatch = request.getRequestDispatcher( "/ChatOutput.jsp" );
            dispatch.forward( request, response );


        } catch ( InstantiationException e ) {

            e.printStackTrace();
        } catch ( IllegalAccessException e ) {

            e.printStackTrace();
        } catch ( ClassNotFoundException e ) {

            e.printStackTrace();
        } finally {
            System.out.println( "finally処置" );
        }
    }
}

 ChatDataDAOImpl_File

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;


public class ChatDataDAOImpl_File implements ChatDataDAO {


    ArrayList<Contribution> dataList = new ArrayList();


    ChatDataDAOImpl_File() {

        try {
            File chatfile = new File( "C:/Users/me/workspace3/chat/chatDAO.txt" );
            BufferedReader br = new BufferedReader( new FileReader( chatfile ) );
            String str = br.readLine();

            while ( str != null ) {
                String array[] = str.split( ":" );
                if ( array.length != 2 ) {
                    break;
                }
                String name = array[0];
                String body = array[1];
                dataList.add( new Contribution( name, body ) );
                str = br.readLine();
            }
            br.close();
            System.out.println( "ok1" );
        } catch ( FileNotFoundException e ) {
            System.out.println( e );
        } catch ( IOException e ) {
            System.out.println( e );
        }
    }


    @Override
    public void addContribution( Contribution c ) {

        dataList.add( c );
        try {
            File chatfile = new File( "C:/Users/me/workspace3/chat/chatDAO.txt" );
            BufferedWriter bw = new BufferedWriter( new FileWriter( chatfile ) );
            for ( int i = 0; i < dataList.size(); i++ ) {
                bw.write( dataList.get( i ).getName() + ":" + dataList.get( i ).getBody() );
                bw.newLine();
            }
            bw.close();
        } catch ( IOException e ) {
            System.out.println( e );
        }
    }


    @Override
    public ArrayList getContribution( int count ) {

        ArrayList aList = new ArrayList();
        int DLS = dataList.size();

        System.out.println( dataList.size() );
        if ( DLS < count ) {
            for ( int j = 0; j < DLS; j++ )
                aList.add( dataList.get( j ) );
        } else {
            for ( int j = DLS - count; j < DLS; j++ ) {
                aList.add( dataList.get( j ) );
            }
        }
        return aList;
    }

}

ChatDataDAO

import java.util.ArrayList;


public interface ChatDataDAO {


    void addContribution( Contribution c );


    ArrayList getContribution( int i );
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

<%= (CLS  - i )%>のところで番号を表示しようとしているんだと思いますが、
int CLS =chatList.size();では今取ってきているのが5件なのでCLS5になり、
iは0, 1, 2, 3, 4となるので、当然のごとく5, 4, 3, 2, 1と表示されますね。

Contributionの中に投稿番号を持っているのなら、単にそれを出力すれば良いですが、
持ってないのだとしたらどのように一意に順序を決定するのかを決めないといけませんね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/23 16:56

    argiusさん、回答ありがとうございます。

    そうなんですよね。。。
    実行結果が5件だと
    5
    5
    5
    5
    5というようになるのでそのような理由だと思っていたのですが、
    記述方法がわからず悩んでおりました。
    もう一度やってみます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    14049questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Eclipse

    1700questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。