0

私はこの小さな質問を理解しようとしています: ユーザーは好きなだけマークを入力しますが、0 より小さいか 100 より大きいマークが入力されると、プログラムは停止し、入力されたものから最大のマークを見つける必要があります。

すべてのマークを取得して配列に追加することを考えていました(その後、ArrayListを使用する方が良いことがわかったので、代わりに使用しました)。

これが私がこれまでに得たものです:

import java.util.*;

...
Scanner input = new Scanner(System.in);
System.out.println("Enter your mark:");

int mark = input.nextInt();
List<String> list = new ArrayList<String>();
while (mark >= 0 && mark <= 100)
{
    list.add(mark);
}

この行list.add(mark);には、int を追加するメソッドのようなものが見つからないというエラーが表示されます。

私はJavaが初めてで、arrayListを正しく理解しているかどうかわかりません。私が間違っている場合、誰かが私を修正できますか?また、配列に値を追加する際の問題を並べ替えると、その中で最大の数を見つけるにはどうすればよいですか?

4

7 に答える 7

2

markは、intリストに保存されStringます。これに変更できます

List<Integer> list = new ArrayList<Integer>();
if (mark >= 0 && mark <= 100) {
    list.add(mark);
}

それを機能させるために。

しかし、あなたは無限ループを持っています!! に変更whileifて修正します。

于 2012-11-29T14:21:31.220 に答える
1

リストの場合、内部にあるアイテムのタイプを定義します< >

変化する

List<String> list = new ArrayList<String>();

List<Integer> list = new ArrayList<Integer();
于 2012-11-29T14:21:50.130 に答える
1
    List<Integer> list = new ArrayList<Integer>();
    do {
       try
       {
         Integer mark = input.nextInt(); //get your input in the loop
         list.add(mark);
       }
       catch(NumberFormatException exception) 
       {
          exception.printStackTrace() ;
       }
    }while (mark >= 0 && mark <= 100);

ループで入力を取得します。少なくとも1回実行されるように、dowhileループを使用することをお勧めします。また、ユーザーが悪意を持ってプログラムをクラッシュさせると想定します。したがって、を使用してその場合に備えますtry catch block。使用したばかりですprintStackTraceが、より良いエラーメッセージが表示されます。

于 2012-11-29T14:21:56.027 に答える
1

まず第一に、あなたはArrayList文字列のを宣言しています: -

List<String> list = new ArrayList<String>();

そして、それに整数を追加しています。コンパイラはそれに泣きます。Listとして宣言しますList<Integer>


次に、 に何かを入力するたびに最大値を維持して、後でList使用しないようにする必要があります。searchList

だから、私はあなたのコードを次のように変更します: -

    int maximum = -1;
    int mark = input.nextInt();

    List<Integer> list = new ArrayList<Integer>();
    if (mark >= 0 && mark <= 100) {

        if (maximum < mark) {
            maximum = mark;
        }

        list.add(mark);
    }

これをループに変換しifて、do-whileユーザーからマークを求め続けるようにします。

于 2012-11-29T14:21:17.403 に答える
0

リストを定義するときは、それを型として定義してから、プリミティブintをリストに追加します。これらが一致することを確認する必要があります。

于 2012-11-29T14:21:27.393 に答える
0

必要な修正は次のとおりです。

1.整数のリストを作成しようとしていますが、文字列のリストを宣言しています。宣言で整数 (整数のラッパー クラス) を使用する必要があります。リストはプリミティブ型では使用できません。

List<Integer> list = new ArrayList<Integer>();

2.入力を一度だけ取得し、それをループのチェック条件で使用しているため、入力マークが条件を満たしている場合にループが継続的に実行されます。ループ内に入力ステートメントを配置する必要があります。

    Scanner input = new Scanner(System.in);
    System.out.println("Enter your mark:");
    int mark = input.nextInt();
    int max=-1;
    while (mark >= 0 && mark <= 100) {
        list.add(mark);
         if (max < mark) {
        max = mark;
    }

      System.out.println("Enter your mark:");
         mark = input.nextInt();
    }
于 2012-11-29T14:39:25.503 に答える
0

要件:ユーザーは好きなだけマークを入力しますが、0 より小さいか 100 より大きいマークが入力されると、プログラムは停止し、入力されたマークから最大のマークを見つける必要があります。

なぜ配列を使用するのですか? 配列を使用する必要がない場合は、このスニペットで十分です...

String instr;
int val, maxval = 0;
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
while ((instr = input.readLine())!=null) { 
    val = Integer.parseInt(instr);
    if (val < 0 || val > 100) break;
    maxval = Math.max(maxval, val);
}
input.close();
System.out.println(maxval);
于 2012-11-29T14:50:44.283 に答える