2016-11-26 13 views
0

プログラムの目的は、5つの数字を入力し、それらを比較したいゲームを選択させることです(lotto/lottoplus1/lottoplus2)。 5つの数字は、arraylistに格納されます。(Arraylist)ユーザ定義の文字列入力時にクラッシュする

全国の宝くじラン3は、各夜に描画します:宝くじ、ロトのプラスワンとのロトプラス2

は、これらの各描画のための番号を生成します。

ユーザが数字の行を入力するときに、 "lotto"、 "plus1"、または "plus2"のいずれかを入力して、数字を比較する必要がある描画を指定する必要があります。

この値は、その特定の行の番号に割り当てられ、その行の番号は、必要に応じて各ロット番号のセットと比較される必要があります。

私の問題です!私が5つの数字を入力すると、 'plus1'と答えてlotteryPlusOneにそれらの数字の比較を割り当てて、クラッシュしてこのメ​​ッセージを出力します:

スレッド「main」の例外java.lang.NullPointerException lottoapp.lottoCounter.compareNums LottoApp.java:61)C:¥Users¥x15587907¥AppData¥Local¥NetBeans¥Cache¥8.1¥executor -snippets¥run.xml:53:Javaが返されました。 :1 BUILD FAILED(合計時間:15秒)

以下は、行136です。public void compareNums()メソッドのインスタンス化可能なクラスです。l = madeUpArrayList.get(i); < -----

メインのApp


package lottoapp; 

import javax.swing.JOptionPane; 
import java.util.ArrayList; 
import java.util.Arrays; 

public class LottoApp { 

public static void main(String[] args) { 
    //declare vars/objects/arrays 
    int[] lottery = new int[5];    //5 Winning numbers 
    int[] lotteryPlus1 = new int[5];  //5 Winning LP1 numbers 
    int[] lotteryPlus2 = new int[5];  //5 Winning LP2 numbers   
    String gameType; 
    int number1; 
    int number2; 
    int number3; 
    int number4; 
    int number5; 

    //array list called madeUpArrayList 
    ArrayList<lottoCounter> madeUpArrayList = new ArrayList(); 

    //object declare and create 
    lottoCounter myCount = new lottoCounter(); 

    //winNums/getLottery need to be initialised at top of program 
    myCount.winNums(); 
    lottery = myCount.getLottery(); 
    lotteryPlus1 = myCount.getLotteryPlus1(); 
    lotteryPlus2 = myCount.getLotteryPlus2(); 

    //Displays winning numbers (Testing Purposes) 
    System.out.println(Arrays.toString(lottery)); 
    System.out.println(Arrays.toString(lotteryPlus1)); 
    System.out.println(Arrays.toString(lotteryPlus2)); 

    //Array List 
    for (int i = 0; i < 1; i++) { 
     lottoCounter l = new lottoCounter(); 
     number1 = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter number 1 ")); 
     number2 = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter number 2 ")); 
     number3 = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter number 3 ")); 
     number4 = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter number 4 ")); 
     number5 = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter number 5 ")); 
     gameType = JOptionPane.showInputDialog(null, "Select a game type for comparison ... lotto/plus1/plus2"); 

     l.setNumber1(number1); 
     l.setNumber2(number2); 
     l.setNumber3(number3); 
     l.setNumber4(number4); 
     l.setNumber5(number5); 
     l.setGameType(gameType); 

     madeUpArrayList.add(l); 
    } 

    //Comparison 
    myCount.compareNums(); 

    //Output Lotto,Lotto Plus One and Lotto plus Two correct guesses 
    JOptionPane.showMessageDialog(null, "Guesses correct for Regular Lottery correct is " + myCount.getCorrectLotto()); 
    JOptionPane.showMessageDialog(null, "Guesses correct for Lottery Plus One is " + myCount.getCorrectPlusOne()); 
    JOptionPane.showMessageDialog(null, "Guesses correct for Lottery Plus Two is " + myCount.getCorrectPlusTwo()); 

} 

}

インスタンス化クラス


package lottoapp; 

import java.util.ArrayList; 

public class lottoCounter { 

//Variables/Constants/data members 
private int correctLotto; 
private int correctPlusOne; 
private int correctPlusTwo; 
private int[] lottery = new int[5]; 
private int[] lotteryPlus1 = new int[5]; 
private int[] lotteryPlus2 = new int[5]; 
private int number1; 
private int number2; 
private int number3; 
private int number4; 
private int number5; 
private String gameType; 
private ArrayList<lottoCounter> madeUpArrayList; 

//Constructor 
lottoCounter() { 
    correctLotto = 0; 
    correctPlusOne = 0; 
    correctPlusTwo = 0; 
    number1 = 0; 
    number2 = 0; 
    number3 = 0; 
    number4 = 0; 
    number5 = 0; 
    gameType = " "; 
} 

//setters 
public void setCorrectLotto(int correctLotto) { 
    this.correctLotto = correctLotto; 
} 

public void setCorrectPlusOne(int correctPlusOne) { 
    this.correctPlusOne = correctPlusOne; 
} 

public void setCorrectPlusTwo(int correctPlusTwo) { 
    this.correctPlusTwo = correctPlusTwo; 
} 

public void setLottery(int[] lottery) { 
    this.lottery = lottery; 
} 

public void setLotteryPlus1(int[] lotteryPlus1) { 
    this.lotteryPlus1 = lotteryPlus1; 
} 

public void setLotteryPlus2(int[] lotteryPlus2) { 
    this.lotteryPlus1 = lotteryPlus2; 
} 

public void setNumber1(int number1) { 
    this.number1 = number1; 
} 

public void setNumber2(int number2) { 
    this.number2 = number2; 
} 

public void setNumber3(int number3) { 
    this.number3 = number3; 
} 

public void setNumber4(int number4) { 
    this.number4 = number4; 
} 

public void setNumber5(int number5) { 
    this.number5 = number5; 
} 

public void setGameType(String gameType) { 
    this.gameType = gameType; 
} 

public lottoCounter(ArrayList<lottoCounter> madeUpArrayList) { 
    this.madeUpArrayList = madeUpArrayList; 
} 

//COMPUTE 
//Lottery Generator | random num generator (1-40)Lottery 
public void winNums() { 
    for (int i = 0; i < lottery.length; i++) {//Generating 1 to 40 numbers 
     lottery[i] = (int) Math.floor(1 + Math.random() * 40);//Using Math.random 
     for (int j = 0; j < i; j++) { 

      if (lottery[i] == lottery[j]) { 
       i--; 
      } 
     } 
    } 

    //Lottery plus 1 generator 
    for (int i = 0; i < lotteryPlus1.length; i++) {//Generating 1 to 40 numbers 
     lotteryPlus1[i] = (int) Math.floor(1 + Math.random() * 40);//Using Math.random 
     for (int j = 0; j < i; j++) { 

      if (lotteryPlus1[i] == lotteryPlus1[j]) { 
       i--; 
      } 
     } 
    } 

    //Lottery plus 2 generator 
    for (int i = 0; i < lotteryPlus2.length; i++) {//Generating 1 to 40 numbers 
     lotteryPlus2[i] = (int) Math.floor(1 + Math.random() * 40);//Using Math.random 
     for (int j = 0; j < i; j++) { 

      if (lotteryPlus2[i] == lotteryPlus2[j]) { 
       i--; 
      } 
     } 
    } 

} 


//Counter for Lottery/LotteryPlusOne/LotteryPlusTwo (COMPARISON) 
public void compareNums() { 
    for (int i = 0; i < 1; i++) { 
     for (int j = 0; j < 5; j++) { 
      lottoCounter l; 
      l = madeUpArrayList.get(i); 

      if (l.getGameType().equals("lotto")) { 
       if (lottery[j] == l.getNumber1() || lottery[j] == l.getNumber2() || lottery[j] == l.getNumber3() || lottery[j] == l.getNumber4() || lottery[j] == l.getNumber5()) { 
        correctLotto++; 
       } 
      } 
      if (l.getGameType().equals("plus1")) { 
       if (lotteryPlus1[j] == l.getNumber1() || lotteryPlus1[j] == l.getNumber2() || lotteryPlus1[j] == l.getNumber3() || lotteryPlus1[j] == l.getNumber4() || lotteryPlus1[j] == l.getNumber5()) { 
        correctPlusOne++; 
       } 
      } 
      if (l.getGameType().equals("plus2")) { 
       if (lotteryPlus2[j] == l.getNumber1() || lotteryPlus2[j] == l.getNumber2() || lotteryPlus2[j] == l.getNumber3() || lotteryPlus2[j] == l.getNumber4() || lotteryPlus2[j] == l.getNumber5()) { 
        correctPlusTwo++; 
       } 
      } 
     } 
    } 
} 

//getters (return values to App Class) 
public int getCorrectLotto() { 
    return correctLotto; 
} 

public int getCorrectPlusOne() { 
    return correctPlusOne; 
} 

public int getCorrectPlusTwo() { 
    return correctPlusTwo; 
} 

public int[] getLottery() { 
    return lottery; 
} 

public int[] getLotteryPlus1() { 
    return lotteryPlus1; 
} 

public int[] getLotteryPlus2() { 
    return lotteryPlus2; 
} 

public int getNumber1() { 
    return number1; 
} 

public int getNumber2() { 
    return number2; 
} 

public int getNumber3() { 
    return number3; 
} 

public int getNumber4() { 
    return number4; 
} 

public int getNumber5() { 
    return number5; 
} 

public String getGameType() { 
    return gameType; 
} 

public ArrayList<lottoCounter> getMadeUpArrayList() { 
    return madeUpArrayList; 
} 

}

+0

スレッドでの例外lottoapp.lottoCounter.compareNumsで "メイン" のjava.lang.NullPointerException \t(lottoCounter.java:136) \t:\ Users \ユーザーx15587907¥AppData¥Local¥NetBeans¥Cache¥8.1¥executor-snippets¥run.xml:53:Java戻り値:1 BUILD FAILED(合計時間:15秒) – x15587907

+0

l = madeUpArrayList.get(i); <-----これは行136です。それはpublic void compareNums()メソッドのInstantiableクラスにあります – x15587907

+0

ようこそStackOverflow!コメントで追加した情報は質問に含まれています。私はそこに移動することをお勧めします。 –

答えて

0

私は誰にも分かりませんが、配列内のデータのように、より多くの情報を持っているといいです。lotterylotteryPlus1madeUpArrayListなどです。 Exceptionによれば、あなたのクラスのライン136にcompareNumsというメソッドにjava.lang.NullPointerExceptionがあるので、実際にデータが入っていることを確認するだけです。行番号を投稿していないので、例外が発生したときはわかりません。

forループが5回反復するため、配列のいずれかにデータがないか、1つ以上の配列にデータの合計エントリが5つもないとします。しかし、配列のインスタンス化の方法やタイミングを見ずに、誰もがあなたの問題の原因であることを確認することはできないと思います。例えば、lotteryPlus2[]lotteryPlus2[0],lotteryPlus2[1]およびlotteryPlus2[2]のデータしか持たないので、jがループ内で3になるときlotteryPlus2[3]は存在せず、java.lang.NullPointerExceptionをスローします。

はまた、私は唯一、なぜ全くあなたmain methodは常に少なくとも一度はとにかく実行されますので、それをそこに持っているものに関係なく、一回ループしていないあなたがループfor (int i = 0; i < 1; i++){}

このループのためにこれを使用する理由に好奇心?正直な質問ですが、私は初心者のプログラマーですので、あなたは私が知り得ない何かのためにそれを使用しているかもしれません。 lottoapp.LottoApp.main(LottoApp.java:61) Cで

+0

こんにちは私は、配列の宝くじ、lotteryPlusOne、およびlotteryPlusTwoのデータは、それぞれの間に5つの乱数の配列ですAppクラスとインスタンシエイブルクラスの全体を表示する私の投稿を編集しました1と40は、InstantiableクラスのwinNums()メソッドで生成され、l = madeUpArrayList.get(i); <-----これは行136のエラーです。それはpublic void compareNums()メソッドのInstantiableクラスにあります。あなたの権利は複数回実行されますが、テスト目的のために一度実行されるはずです。感謝! – x15587907

+0

forループは、それぞれの1d配列に5つの数字があるので、5回繰り返します。これらは、宝くじ、lotteryPlus1、lotteryPlus2です。これらの5つの数字のいずれかがnumber1、number2、number3、number4のユーザー入力と同じかどうかを確認しています。 、または5 – x15587907

関連する問題