0

「130」や「1245」など、軍の時間を表す3〜4個の数字を含む文字列時間を使用するメソッドに取り組んでいます。このメソッドの目的は、文字列時間の内容を2つの部分からなる整数配列に割り当てることです。[0]は時間(上記の例の「1」や「12」など)であり、[1]は分(私の例では「30」または「45」)。

if(str.length()== 3)は、「130」などの文字列をキャッチするためのものです。この場合、時間は10未満であり、文字列には先行ゼロがありません。

コンパイルすると、エラーが表示されます。

error: incompatible types
                          temp = a[1] + a[2];
                                      ^
required: String
found: int

error: incompatible types
                          temp = a[0] + a[1];
                                      ^
required: String
found: int

error: incompatible types
                          temp = a[2] + a[3];
                                      ^
required: String
found: int

私はcharデータ型を読んでいますが、私が理解していることから、それは整数に似た数値を持っています。私は次のように型キャストしようとしました:

temp = (String) a[1] + a[2];

ただし、次のエラーが発生します。

error: inconvertible types
                          temp = (String) a[1] + a[2];
                                           ^
required: String
found: char

この時点で、私は何をすべきかわかりません。以下は私のコードです:

private int[] convertStringToHoursMins(String time) {
    String str = time;
    String temp;
    char[] a = str.toCharArray();
    int[] hoursMins = new int[2];
    try {
        if (str.length() == 3) {
            hoursMins[0] = a[0];
            temp = a[1] + a[2];
            hoursMins[1] = Integer.parseInt(temp);
        }
        else {
            temp = a[0] + a[1];
            hoursMins[0] = Integer.parseInt(temp);
            temp = a[2] + a[3];
            hoursMins[1] = Integer.parseInt(temp);
        }   
    }
    catch(NumberFormatException e) {
        System.out.println("Invalid time.");
    }
    return hoursMins;
}

あなたが提供できるどんな助けにも前もって感謝します。

4

8 に答える 8

3

私はあなたがこれを簡単に行うことができるはずだと信じています:

temp = "" + a[1] + a[2];

「」を追加すると、それが文字列に変換されるため、不一致エラーは発生しません。

于 2012-09-27T00:15:56.527 に答える
1

あなたがすでにaとして持っているとするStringと、これを置き換えることができます:

temp = a[1] + a[2];

temp = str.substring(1, 3);
于 2012-09-27T00:20:59.317 に答える
0

問題は、コンパイラがintを期待しているときに、2つの文字列を一緒に追加しようとしていることです。より簡単な解決策は、Stringクラスのsubstringメソッドを使用することです。したがって、コードは次のようになります。

private int[] convertStringToHoursMins(String time) {
    int[] hoursMins = new int[2];
    try {
        if (time.length() == 3) {
            hoursMins[0] = Integer.parseInt(time.subString(0,0);
            hoursMins[1] = Integer.parseInt(time.subString(1,2);
        }
        else {
            hoursMins[0] = Integer.parseInt(time.subString(0,1);
            hoursMins[1] = Integer.parseInt(time.subString(2,3);
        }   
    }
    catch(NumberFormatException e) {
        System.out.println("Invalid time.");
    }
    return hoursMins;
}
于 2012-09-27T00:17:41.117 に答える
0

コードから、tempは。Stringであり、aは。の配列ですchar

String temp;
char[] a = str.toCharArray();

temp = a[1] + a[2];

charまず、変数をplus演算子で連結することはできません。文字の値を整数に変換してから、それらを足し合わせるだけです。以下の例は97を出力します。

    char a = '0';
    char b = '1';
    System.out.println(a+b);

したがって、2つの文字を追加した結果はintになります。したがって、a [1] + a [2]は、を生成しint、tempはString。です。

次に、JavaはintをStringに自動的に変換しないため、コードは正当ではありません。

あなたがやりたいように見えるのは、の部分文字列を取り、strそれを。で整数に変換することparseIntです。

幸運を。

于 2012-09-27T00:26:12.963 に答える
0

ヒント:

hoursMins [0] = Integer.parseInt(time.substring(0, time.length()-2));
//Similar line for minutes
//Magic constraint filtering goes here ( no negative numbers, minutes under 60, hours under 24)

プログラムを短くする

于 2012-09-27T00:32:10.090 に答える
0

これを試して:

temp = String.valueOf(a [1])+ String.valueOf(a [2]);

Javaは実行しないでください。ただし、文字列から文字への変換の問題のように聞こえます:)

于 2012-09-27T00:13:06.520 に答える
-1

最初に文字列を整数にキャストし、後でそれらを使用して計算を行う必要があります。

int a = Integer.parseInt(a[0]);
int b = Integer.parseInt(a[1]);

int temp = a+b;
于 2012-09-27T00:14:20.603 に答える
-1

互換性のないタイプは、オブジェクトから返されるタイプが予想されるタイプと異なることを考慮しています。デバッグ(ステップスルー)して、オブジェクトから必要なタイプに返すタイプを見つけます。

于 2012-09-27T00:13:34.787 に答える