2016-05-05 12 views
-1

終了よりもプログラムが実行されますが、なぜですか?文法エラーがないので混乱しているのですが、なぜ終了するのか説明してください、ありがとうございます。かなり新しいjavaと配列を使用しています。私のプログラムはなぜ終了していますか?

import java.text.*; 

import java.util.*; 

public class randomizer { 
public void randomizer() throws InterruptedException 
{ 
    randomizer r = new randomizer(); 
    int[] numbers = {3,7,2,62,1,53,16,563,12,13,75}; 
    Calendar rightNow = Calendar.getInstance(); 
    int hour = rightNow.get(Calendar.HOUR_OF_DAY); 
    int minute = rightNow.get(Calendar.MINUTE); 
    int seconds = rightNow.get(Calendar.SECOND); 
    int[] numbers2 = {10,32,61,2,5}; 
    int[] date = {hour,minute,seconds}; 
    int RandomNumber = (r.getRandom(date) * r.getRandom(numbers)) + r.getRandom(numbers2); 
    while(true) // just for test case purposes 
    { 
     Thread.sleep(1000); 
     System.out.println(RandomNumber); 
    } 

} 
public static int getRandom(int[] array) { 
    int rnd = new Random().nextInt(array.length); 
    return array[rnd]; 
} 


public static void main(String[] args) { 
    randomizer r = new randomizer(); 


} 

} 
+1

形式では、Java標準、 'UpperCamelCase'クラス名、' lowerCamelCase'メソッド、および変数名ごとに正しくコーディングします。 –

+0

あなたは何でプログラミングしていますか?プログラミングにIDEを使用している場合は、通常、エラーコンソールが表示されます。プログラムを実行して終了すると、エラーが表示されます。 –

+6

'public void randomizer()'がコンストラクタであることを意図していた場合、それを修正するとすぐに 'StackOverflowError'が発生します。 –

答えて

0

をし、このための何もしません。これまでのところは良い..

いますが、この持っているコードで:

public void randomizer() throws InterruptedException 
{.... 
.... 

} 

をし、それはコンストラクタではありません、それはメタでありますOD ...ので、限り、あなたは実行されませんそれを呼び出すいけないと...

あなたは

randomizer() throws InterruptedException 
{.... 
.... 

} 

をやったり、メインメソッドでそれを呼び出すことにより、コンストラクタにそれを変更するか必要

その後
public static void main(String[] args) { 
    randomizer r = new randomizer(); 
    r.randomizer(); 
} 

THERにあなたはこれがあなたが

public void randomizer() throws InterruptedException 
{ 
    randomizer r = new randomizer(); //this will recursive create objects until overflows.... 
    int[] numbers = {3,7,2,62,1,53,16,563,12,13,75}; 
    Calendar rightN 
+0

説明していただきありがとうございます。どうもありがとう。 –

+0

あなたは大歓迎です! –

+0

私は、あなたがMethodNameメソッド= new MethodName()のような新しいオブジェクトを作成するたびに、私はあなたがそれを起動してからコードが自動的にコードを実行すると思った。 –

3

あなたrandomizerクラスにはコンストラクタ定義されていないので、あなたのvoid main方法でそれを構築することは何もしません。

あなたのクラスにはvoid randomizer()メソッドが定義されていますが、これはおそらくバグです。あなたはクラスのランダマイザーのオブジェクトを作成し、ここで

public static void main(String[] args) { 
    randomizer r = new randomizer(); 
} 

:(クラスはパスカルケースである必要があり、Randomizerに注意し、方法はキャメルケースでなければなりません(randomizer)をアプリが終了される

+0

intを返すように変更する必要がありますか?戻り値の型として –

+2

IDEでデバッガを使用し、コードをステップ実行すれば、これはかなりわかりやすいでしょう。デバッガはあなたの友人で、使い方を学んでください! –

+0

コンストラクタのJavaチュートリアルのセクションを読んでください:https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html –

-1

実行してしまいますが、それがあるので、この方法を変更します

これは、誰がそれを書いているかにかかわらず、慣用的なJavaコードをどのように見えるかを示しています。

import java.util.Calendar; 
import java.util.Random; 

public class Randomizer 
{ 
    private int getRandom(final int[] array) 
    { 
     final int rnd = new Random().nextInt(array.length); 
     return array[rnd]; 
    } 

    private Randomizer() throws InterruptedException 
    { 
     final int[] numbers = {3, 7, 2, 62, 1, 53, 16, 563, 12, 13, 75}; 
     final Calendar rightNow = Calendar.getInstance(); 
     final int hour = rightNow.get(Calendar.HOUR_OF_DAY); 
     final int minute = rightNow.get(Calendar.MINUTE); 
     final int seconds = rightNow.get(Calendar.SECOND); 
     final int[] numbers2 = {10, 32, 61, 2, 5}; 
     final int[] date = {hour, minute, seconds}; 
     final int RandomNumber = (this.getRandom(date) * this.getRandom(numbers)) + this.getRandom(numbers2); 
     while (true) // just for test case purposes 
     { 
      Thread.sleep(1000); 
      System.out.println(RandomNumber); 
     } 
    } 

    public static void main(String[] args) throws InterruptedException 
    { 
     new Randomizer(); 
    } 
} 

最初にするべきことは、Step DebuggerをIDEで使用する方法です。

0

ランダム化オブジェクトを作成しましたが、実際には何もしませんでした。実装するメソッド(randomizer())はコンストラクタではないので、呼び出す必要があります。あなたのメインメソッドの内部で、今すぐ2つのことを行う必要があります:

randomizer r = new randomizer(); r.randomizer();

あなたのロジック内部のクラスを開始するために。

PS1は、コンストラクタを実装したいと思うように、 PS2のJavaで命名規則を読んでいます。あなたのメソッド 'public void randomizer()'が1であると想定されていた場合、キーワード(戻り値の型) 'void'を削除し、 'randomizer r = new randomizer();メインの内部では、ロジックが実行されます。

関連する問題