dポイントプレゼントキャンペーン実施中!

[長文失礼致します]Java入門者の者です。学校の担当講師から、「整数を要素とする配列リスト L に、キーインした複数の整数値を順に格納する。
このあと、L のすべての要素を逆順に表示し、直後にLのすべての要素を正順に
表示するプログラムを作れ。
例えば、10,15,20,..,45,50 とキーインしたとき、入力完了後に
50,45,..,20,15,10,10,15,20,..,45,50
と表示されるはずである。」

という問題が課され、全然分からずに非常に困って居ます。
一応習ったばかりのinsertメソッド?と呼ばれるメソッドで以下の様なプログラムを書いたのですが、全く実行されませんでした。

package saishuukadai01;
import java.util.Scanner;
class list {//配列リスト
static final int MAX =100;
int N ;
int[]value = {10,15,20,25,30};
list(){N=0;value=new int[MAX];
}
int insert(int k,int val) {//insertメソッド。学校の資料に掲載されてる内容をそのままコピペしただけです。
int k1;
for(k1=N-1;k1>=k;k1--) {
value[k1+1]=value[k1];
}
value[k]=val;
return -1;}
}
public class saishuukadai01 {//アプリ

public static void main(String[] args) {
Scanner stdin =new Scanner (System.in);
list S = new list();
int val;
for(val=0;val<100
;val++) {
S.insert(0,val);
}
System.out.println(S);
}
}

各行ごとに自分なりの解釈を踏まえて説明すると、、、

1 パッケージ
2 キーボード入力
3 配列リストclassの作成
4 整数intの上限がMAX=100である事を表示
5 整数の配列 valueを作る
6 コンストラクタ?(ここもよく分からないのですが、配列リストclassにリストを作成という事でしょうか。)
9〜16 インサートメソッド。後のアプリでインサートを使用する為に予めその内部構造を記した、所謂、「関数」という解釈であってますでしょうか?
17 アプリのクラス
19いつもの定型コード。mainメソッド。
20キーボード入力?これも何を言ってるかよく分からないです。が、いつもの文章…
21配列リストSをnew list()として新しく作成
22 型名 整数変数 (変数valを宣言)
★23 valが0から100未満の間、配列リストSの0番目の前にvalを次々に挿入。つまり、10.15.20.25.30という配列があるとすれば、10から順に0番目の前に挿入されて行くので、30.25.20.15.10と逆順挿入される筈。

26 23で行われた後の配列リストSを表示する。

となり、実行されない原因は、やはり23行目のfor文が間違っているのと、上の配列リストclassと下のアプリが全く連動・連結されてない事だと思っています。

どの様なfor文を作れば、配列リストクラスで作った配列を操作する事が出来るのでしょうか?
また、配列リストclassとアプリが連動・連結されてない原因は何故でしょうか?…
どの様にすれば解決出来るのでしょうか?
また、不明な点が有ればご指摘・訂正して頂ける非常に幸いです。
以上の事について、どなたか分かる方教えて下さい。
何卒よろしくお願い致しますm(_ _)m

「[長文失礼致します]Java入門者の者で」の質問画像

A 回答 (2件)

どこからどこまでが、あなたが作成したコードですか?


insertメソッドは改変してもいいですか?


まず、『listクラス』で『N』を全く用いていないのは、気になりませんか?なんの変数ですか?
おそらく、配列の『要素数』なので、要素を追加するたびに1増やしましょう。
つまり、insertの末尾に『N++;』を挿入しましょう。


6行目の『value = {...};』は何ですか?『value = new int[MAX];』で、内容が上書きされていますが大丈夫ですか?


『System.out.println(S);』は何がしたいのですか?
これで、リストの要素を表示したつもりですか?
リストの内容を表示させたいなら、『listクラス』に『print();』メソッド(名前はなんでも良い)を加えましょう。
例えばこんな感じ、

void print() {
// 添字0から順番に配列の要素を表示
for (int i = 0; i < N; i++)
System.out.print(value[i] + " ");

// 逆順で配列の要素を表示
for (int i = N-1; 0 <= i; i--)
System.out.print(value[i] + " ");

// 末尾で改行
System.out.println();
}



最後に、表記に関して。
1. クラス名は大文字始まりが望ましいです。list -> ListとかMyList また renshuu01 -> Renshuu01
2. ローマ字も望ましくありません。renshuu01(学校指定の表記は仕方がないですが、)
3. 画像を見るからにインデント、改行がグチャグチャです。
  ・2行目と3行目の間は改行する方が良い。
  ・7行目、なんでそうなった?
    『{』中カッコの後は改行しましょう。
    『;』セミコロンの後も改行しましょう。非常に読みにくいです。
  ・10行目〜15行目、インデントが浅い。タブかスペースの数を統一しましょう。
  ・15行目、『}』中カッコは改行して入れましょう。(スコープが分かりにくいし、末尾にコードを挿入しづらい)
  ・16行目と17行目の間も改行を入れた方が良い。
  ・24行目、なぜそこに改行を入れた?意味不明な改行は止めましょう。
  ・29行目、インデントが揃っていない。揃えましょう。

初心者にありがちですが、行数を減らすために可読性を落としてしまっています。
『行数を増やしてでも、コメントや改行で可読性を良くしましょう』

表記は、コードの可読性に関する問題で、アルゴリズムを指摘しているわけではありませんし、エラーにもなりませんが極力読みやすいものが望ましいです。
自分が後で見たときに、困りますし、このように教えてもらうときに時間を浪費してしまいます。
    • good
    • 0

>int[]value = {10,15,20,25,30};



この配列valueを順に出力するだけのプログラムを考えると、例えばこうなります:
https://ideone.com/ay1BIn
これをもとに配列の添え字で参照が分かっていれば、逆順に出力するよう変更できると思います。
あとは、キーイン(データの入力)のコードが書ければ、完成できるかと。

Javaに限りませんが、データがどのように入っていて、それをどう出力すればよいかが思いつかないとプログラミングは大変だと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!