2016-04-02 9 views
1

私はLongを返すことになっているメソッドがあります。ここで **type mismatch; found : Long required: Int**タイプの不一致。 found:Long required:Int


がメソッドです:: は、しかし、私はエラーを取得する

def getRandom_IMEI(from : Long,to : Long) : Long = { 
    if (from < to) 
     return from + new scala.util.Random().nextInt(Math.abs(to - from)); 
    return from - new scala.util.Random().nextInt(Math.abs(to - from)); 
    } 

と私はこのような、このメソッドへの呼び出しを行うとき:

def IMEI() : String ={ 
    var str: String ="" 
    var rand:Long = 0 
    rand = functest.getRandom_IMEI(350000000000000,355000000000000) //error 
    str=rand.toString() 
    return str 
    } 

私はこのエラーがあります:

Multiple markers at this line: 
     ◾integer number too large 
     ◾integer number too large 
+0

IMEI関数で 'val'を' var'ではなく、一度だけ割り当てます。 –

+0

私の投票を得るsaleh –

答えて

1

あなたの目標が何であるかを確かめながら、私の目は次のものをつかまえます。あなたが書いたよう

、次の行でエラー:あなたが長い番号の末尾にLを追加することによって、それは長いようにする必要があり

rand = functest.getRandom_IMEI(350000000000000,355000000000000) //error 

rand = functest.getRandom_IMEI(350000000000000L,355000000000000L) 

しかし、あなたはまだそれがこのようになりますので、varする必要はありませんし、あなたのアールは、文字列を返すので、あなたがstrを宣言する必要はありませんあなたのIMEI()方法をきれいにすることができます:

def IMEI(): String = { 
    val rand = getRandom_IMEI(355000000000000L, 350000000000000L) 
    rand.toString 
} 

Note: long type is specified by appending L or l suffix to the litera (link)

もう1つはあなたのgetRandom_IMEIも私のためにはうまくいかなかった、私はいくつか単純なようなものをしました:

def getRandom_IMEI(from: Long, to: Long): Long = { 
    if (from < to) { 
    from + new scala.util.Random(to - from).nextLong() 
    } else { 
    from - new scala.util.Random(to - from).nextLong() 
    } 
} 

最終的な目標はわからないので、.nextLong()の代わりにnextInt()を使用することもできます。しかしおそらくあなたは実用的なコードを持っているので、自分のやり方でやることができます。私はテストし、働いています。 Scalaでは

  • そして、一般的なルール、あなたはそれが自動的に最後の文を返しますが、返却する必要はありませんので、簡単にあなたの二からのリターンを削除するJava
  • のような;で各行を終了する必要はありません。メソッドを保持しておきます。str
+0

それは働いています、ありがとう –

+1

私はすでにあなたの答えを投票しました –

+1

私はフィードバックを得てうれしく、それは働いています –

0

あなたの長いリテラルには1つの問題があります。 Random.nextIntメソッドはInt引数を必要としますが、toとfromはLongであり、絶対差はLongです。 違いがIntに収まることがわかった場合は、結果を強制的にIntに変換して明示的に変換できます。

コードに数値を入力すると、Intとして解釈されますが、コード内の数値が大きすぎてIntでない場合は、各数値に "L"というサフィックスを付ける必要があります(小文字のlも同様に動作します) 。

複数のリターンステートメントは悪いフォームとみなされ、不要です。私は両方のreturnステートメントを削除し、elseを追加します 2番目のメソッドでは、最後のreturnステートメントとval割り当てを取り除くことができます。