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

首先,您要声明一个ArrayList字符串:-

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

你正在向它添加一个整数。编译器会为此哭泣。声明你的Listas 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 回答
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);

在循环中获取您的输入,您可能需要使用 do while 循环,以便它至少运行一次。还假设用户是恶意的,会导致你的程序崩溃。所以使用try catch block. 我刚刚使用printStackTrace但显示了更好的错误消息。

于 2012-11-29T14:21:56.027 回答
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 回答