0

次のような問題にどう対処したらいいのかわからない。

スペースで区切られたさまざまな数字を入力できるユーザー用の入力があります(例:(20 30 89 ..))入力された数字の数を数える必要があります(この場合は3つの数字が入力されました)これを行うにはどうすればよいですか?

この背後にあるロジックは、スペースの数を数え、それに1を追加するようなものだと思います(前にスペースがない最初の数)が、コードを介してこれを行う方法がわかりません。また、最初の数字の前にスペースが入力されているかどうかを確認し、最終カウントに+ 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()メソッドを使用して行全体を読むだけです。
  • 読み取り行を1つ以上に分割します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

これが私の解決策です。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 に答える
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 に答える