0

我不知道如何处理以下问题。

我有一个输入供用户输入,他们可以输入用空格分隔的各种数字,例如(20 30 89 ..)我需要计算输入了多少数字(在这种情况下输入了 3 个数字)我会怎么做?

我假设这背后的逻辑类似于计算空格数并向其添加 1(其前面没有空格的初始数字),但我不确定如何通过代码执行此操作。最好检查是否在第一个数字之前输入了空格,如果是,则不要将 + 1 添加到最终计数中,还要检查诸如双空格、三空格等内容并将它们计为一个空格。最后看看最后是否没有空格(所以不加起来)。

这是我到目前为止所得到的(用户输入):

package temperature;

import java.util.*;

/**
 * @author --
 */
public class Histogram {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        // Input for grades
        Scanner input = new Scanner(System.in);
        System.out.println("Enter temperatures below (separated by spaces e.g. 20 30 89 ..)");
        int temperature = input.nextInt();
    }
}
4

5 回答 5

3
  • 只需阅读使用Scanner#nextLine()方法的完整行。
  • 将读取行拆分为一个或多个spaces-+为此使用量词
  • 然后得到得到的长度array

这是一个例子: -

if (scanner.hasNextLine()) {
    int totalNumbers = scanner.nextLine().split("[ ]+").length;
}
于 2012-11-26T20:41:34.350 回答
1

如果只计算空格,则最终可能会以数字形式出现任何垃圾数据。我的建议是阅读所有输入,直到你到达一个空格字符。如果转换失败,则尝试将其转换为整数(或双精度),对无效输入进行错误处理,否则增加计数器。

一个例子是这样的:

// Sample input used.
    String input = "23 54 343 75.6 something 22.34 34 whatever 12";
    // Each number will be temporarily stored in this variable.
    Double numberInput;
    // Counter used to keep track of the valid number inputs.
    int counter = 0;
    // The index directly after the number ends.
    int endIndex = 0;
    // Now we simply loop through the string.
    for (int beginIndex = 0; beginIndex < input.length(); beginIndex = endIndex + 1) {
        // Get the index of the next space character.
        endIndex = input.indexOf(" ", beginIndex);
        // If there are no more spaces, set the endIndex to the end of the string.
        if (endIndex == -1) {
            endIndex = input.length();
        }
        // Take out only the current number from the input.
        String numberString = input.substring(beginIndex, endIndex);
        try {
            // If the number can be converted to a Double, increase the counter.
            numberInput = Double.parseDouble(numberString);
            counter++;
        } catch (java.lang.NumberFormatException nfe) {
            // Some error handling.
            System.err.println("Invallid input: " + numberString);
        }
    }
    System.out.println("Total valid numbers entered: " + counter);

输出:

Invalid input: something
Total valid numbers entered: 7
Invalid input: whatever

编辑:抱歉,我打开了答案窗口,没有看到其他回复。拆分功能应该做得很好:)

于 2012-11-26T21:38:29.690 回答
0

您可以按空格拆分它并计算元素的数量:

    System.out.println("20".split (" ").length);
    System.out.println("20 30".split (" ").length);

这将分别打印 1 和 2。

这是一个小提琴

于 2012-11-26T20:41:59.727 回答
0

如果您可以将输入作为字符串然后从字符串中检索数字会更好。

Scanner input=new Scanner(System.in);
String st=input.nextLine();
String[] split=st.split(" ");
ArrayList<Integer> temp=new ArrayList<>();
String regex="^[0-9]+$";
     for(int i=0;i<split.length;i++)
     {
         if(split[i].matches(regex)) temp.add(Integer.parseInt(split[i]));
     }

现在你得到了所有的温度作为ArrayList<Integer>

于 2013-06-29T14:49:26.537 回答
0

这是我的解决方案。它比使用 Split 方法的解决方案要长一点,但它只会在结果中包含数值。所以对于以下输入:

12 32 234 555 24 sdf 4354 dsf34r34 rfedfg 4353

该函数将在数组中返回以下值:

12
32
234
555
24
4354
4353

这是功能:

private static String[] getWholeNumbers(String input) {
    ArrayList<String> output = new ArrayList<String>();

    Pattern pattern = Pattern.compile("\\b\\d+\\b");
    Matcher matcher = pattern.matcher(input);
    while (matcher.find()) {
        output.add(matcher.group());
    }
    return output.toArray(new String[output.size()]);
}

如果您只需要计数,也可以轻松更改该功能以执行此操作。

于 2012-12-01T21:32:00.190 回答