1

これらは私の質問です:

  1. "public static boolean validNumCheck(String num){"-"illegal start of expression"、"';'という行でいくつかのエラーが発生します 期待される」、および「')'期待される」。

  2. 番号ごとに合計3回の試行をユーザーに与えるにはどうすればよいですか?私は今、プログラムがユーザーに3つの数字を要求し、数字を正しくするために合計3回試行することを信じています(私の説明はひどいです...コードを読んで、私が何を意味するのかをよりよく理解してください)。

これは私のコードです:

import javax.swing.JOptionPane;

public class Assignment3 {
    public static void main (String[] args){
        final int MAX_TRIES = 3;
        int[] attempts= new int[2];
        String[] getNumber= new String [2];

        //Ask the user for 3 integers.
        while(attempts[0]<MAX_TRIES){
            getNumber[0]= JOptionPane.showInputDialog(null,"Please enter an integer between 0-200.");

            //Pass the value to validNumChek
            validNumCheck (getNumber);

            //If it is not a valid number give the user 3 more tries.
            if (getNumber== false){
                while(attempts[1]<MAX_TRIES){
                    getNumber[1]= JOptionPane.showInputDialog(null,"Please enter an integer between 0-200.");
                    attempts[1]++;}
                }
            attempts[0]++;
        }

    //Parse the string to an integer and check if it is a valid number.
    public static boolean validNumCheck(String num){
        int number;

        try {
            number = Integer.parseInt(num);
            return number >= 0 && number <= 200;                
        }catch(NumberFormatException e){
            //If it is not a valid number return false.
            return false;
        }
    }
}
4

5 に答える 5

3

問題の擬似コードまたはアルゴリズムを最初に作成し、それが機能する場合は後でプログラミングに対処することが重要だと思います。そうしないと、1. 問題のロジックと 2. 実装の詳細という 2 つのことを同時に解決することになります。

これは私がそれを行う方法です。

//The three numbers should be entered by a user in the main method. 

MAIN PROGRAM starts 
declare a , b , c as numbers

//The numbers should be positive and less than 200. 
// see validNumCheck below.

//part 1.If not, the program asks the user to renter the number.
//part 2.The user will have three chances to enter a valid number for each number. 
//part 3. If the number is still invalid after the three trials, the program displays an error message to the user and ends.

 // ok then read a number and validate it. 
 attempts = 0;
 maxAttempts = 3;

 //part 2. three chances... .           
 loop_while (  attemtps < maxAttempts ) do  // or 3 directly.

      number = readUserInput();  // part 1. reenter the number...
      if( numcheck( number ) == false ) then 
           attempts = attempts + 1;
           // one failure.. try again. 
      else 
           break the loop.
      end 

 end 

 // part 3:. out of the loop. 
 // either because the attempts where exhausted 
 // or because the user input was correct.  
 if( attempts == maxAttemtps ) then 
     displayError("The input is invalid due to ... ")
     die();
 else  
     a = number 
 end 

// Now I have to repeat this for the other two numbers, b and c.
// see the notes below... 
MAIN PROGRAM ENDS

そして、これは「validNumCheck」への関数になります

  // You are encouraged to write a separate method for this part of program – for example: validNumCheck

bool validNumCheck( num )  begin
     if( num < 0 and num > 200 ) then 
         // invalid number 
         return false;
     else 
         return true;
     end
end 

したがって、数値「a」を検証できるポイントに到達しましたが、「b」と「c」についても同じことを行う必要があります

コードを「コピー/貼り付け」して、ニーズに合わせてコードを微調整しようとして生活を複雑にする代わりに、関数を作成し、その機能を新しい関数に委譲することができます。

したがって、新しい疑似コードは次のようになります。

MAIN PROGRAM STARTS 
declare a , b , c as numbers
     a = giveMeValidUserInput();
     b = giveMeValidUserInput();
     c = giveMeValidUserInput();

     print( a, b , c ) 

MAIN PROGRAM ENDS

そして、ロジックを新しい関数 (またはメソッド) に移動します。

関数 giveMeValidUserInput は次のようになります (最初の疑似コードとほぼ同じであることに注意してください)。

function giveMeValidUserInput() starts 
    maxAttempts = 3;
    attempts = 0;


     loop_while (  attemtps < maxAttempts ) do  // or 3 directly.

          number = readUserInput();
          if( numcheck( number ) == false ) then 
               attempts = attempts + 1;
               // one failure.. try again. 
          else 
               return number 
          end 

     end 

     // out of the loop. 
    // if we reach this line is because the attempts were exhausted.
     displayError("The input is invalid due to ... ")
   function ends 

validNumCheck は変更されません。

その do コードからの受け渡しは、なんとなく簡単です。やりたいこと (分析) と、それをどのようにやりたいか (設計) を既に理解しているからです。

もちろん、これは経験があれば簡単です。

概要

問題からコードに渡す手順は次のとおりです。

  1. 問題を読んで理解してください (もちろん)。

  2. 可能な「関数」と変数を特定します。

  3. どのようにそれを行うかを段階的に書いてください (アルゴリズム)

  4. それをコードに変換し、できないことがあれば、それを実行する関数を作成し、動き続けます。

于 2009-02-25T20:39:58.367 に答える
2

メソッドシグネチャ(つまり " " )で、仮パラメータpublic static int validNumCheck(num1,num2,num3)の型を宣言する必要があります。" "はトリックを行う必要があります。public static int validNumCheck(int num1, int num2, int num3)

ただし、より適切な設計は、validNumCheck1つのパラメーターのみを取得するようにし、3つの番号のそれぞれでそれを呼び出すことです。


私の次の提案(更新されたコードを見た後)は、まともなIDEを入手することです。NetBeansにロードしたところ、いくつかのエラーが見つかりました。特に、「不正な式の開始」は}、IDEがすぐにフラグを立てるwhileループを忘れたためです。「Helloworld」を通過した後、Notepadはそれをカットしなくなります。

すべてのエラーの修正をリストするつもりはありませんが、、、、およびはすべて異なることに注意してくださいint[]。あなたはそれらを交換可能に使用しているようです(おそらくあなたがあなたのコードに加えた変更の量のために)。繰り返しますが、IDEはこれらすべての問題にフラグを立てます。intString[]String


最新のコードへの対応(リビジョン12):近づいています。あなたはMAX_TRIES2つの異なる目的のために使用したようです:入力する3つの数字と各数字の3つのチャンス。これらの2つの数値は同じですが、両方に同じ定数を使用しない方がよいでしょう。NUM_INPUTSそしてMAX_TRIES私がそれらを呼ぶものです。

}そして、whileループの欠落をまだ追加していません。

それらを修正した後に次に行うことは、を調べることですif (getNumber == false)getNumberはであるString[]ため、この比較は違法です。validNumCheck次のような変数にの戻り値を取得する必要があります。

boolean isValidNum = validNumCheck(getNumber[0]);

またgetNumber、配列になる理由はありません。一度に1つだけ必要Stringですよね?

于 2009-02-25T18:46:05.753 に答える
2

メソッド定義のすべてのパラメーターには型が必要です。

public static int validNumCheck(int num1, int num2, int num3){

しかし、一度に 1 つしかチェックしないのに、なぜ 3 つの数字すべてを渡すのか不思議です。そして、数値が真かどうかを返したいので、戻り値はブール値でなければなりません:

public static boolean validNumCheck(int num){
    // test and return true or false

また、ユーザーが「abc」と入力すると、「Intger.pareInt(String)」メソッドから例外が発生します。入力したテキストを文字列として保存し、validNumCheck に渡し、変換して 0 から 200 の間であるかどうかを確認したい場合があります。

public static boolean isValidNumber(String num){
try {
    int number = Integer.parseInt(num);
    return number >= 0 && number <= 200;        
}catch(NumberFormatException e){
    return false;
}
} 

EDIT 1: 3回の試行には、番号が有効になるか3回試行されるまで実行されるループが必要です。int で試行回数を数えるだけです。

ところで、JOptionPane と JMessageDialog を使用する必要がありますか? これは GUI のものであり、穴のことを複雑にするだけです。System.out と System.in を使用して、コンソールにテキストを読み書きすることもできます。

編集 2: もう 1 つのヒントです。指定された長さの int 配列を作成すると、配列内のすべての場所が 0 で埋められるため、次のように書くことができます。

int[] count= new int [3];

それは必要ありません:

count[0]=0;
count[1]=0;
count[2]=0;

0 以外の値を使用する場合は、次のような短い形式を使用できます。

int[] count = {1, 5, 2}

編集 3: やるべきこと/学ぶべきことの 1 つは、これです。すべてを記述しないでください。多くのエラーが発生し、プログラムが実行されません。少しコーディングして、少しテストします。その一部を実行し、それが実行されるのを見て、あなたは幸せです.

これは今までに実行されましたか?つまり、使用しようとしている JOptionPane-InputDialog はもう見ましたか? そうでない場合は、最初にこれだけを実行してください: (そして実行してください!)

public class Assignment3 {

    public static void main (String[] args){

        int[] numbers = new int[3];

        for (int i = 0; i < numbers.length; i++) {
            JOptionPane.showInputDialog("enter something");
        }
    }
}

実行しますか?すごい!ここで、その行を JOptionPane でループ内にラップしてみてください。これは、ユーザーが有効な数値を入力するまで (既に取得した checkValidNum メソッドを使用して)、または 3 回試行するまで実行されます。

于 2009-02-25T18:49:33.483 に答える
2

このスレッドが役立つ場合があります。それらは「問題の説明」から「実際のコーディング」へのヒントです

あなたの特定の質問に従って:

各番号に有効な番号を入力する機会をユーザーに 3 回与えるにはどうすればよいですか? (「答え」は欲しくないのですが、アイデア/ヒントだけです。

もしあなたが実生活で (記憶力の悪い) レジ係だったらどうしますか? 顧客を断ったのが1回目なのか2回目なのか思い出せないほど、記憶力が非常に悪いということですか?

私はそれを紙に書き留め、顧客を拒否するたびに「|」を追加します。

"| | |"

新聞に三行あると警察に通報します。.. :)

ここも似ています。変化する可能性のあるものがなければ 、無限ループに入ります;)

ValidNumCheck は、値を返し、void メイン メソッドで終了するとします。

いいえ

...または、そのメインメソッドでプログラムを終了させることはできますか?

はい。

于 2009-02-25T19:08:29.660 に答える
2

カウントするとき (実生活では)、数値をボックスに格納する必要はありません。カウントの値を変更して制限を設けるだけで済みます。

たとえば、これを置き換えることができます:

        int[] count= new int[2];

これとともに:

        int attemtps = 0 ; // or count 
        int maxTries = 3;

整数の配列を文字列の配列に割り当てることはできません。

       String[] getNumber= new int [2];

文字列の配列を使用しても機能する場合がありますが、文字列の配列を割り当てる必要があります

       String[] numbers = new String[2];

または、int の配列を使用できます。

       int [] numbers = new int [2]; 

一つを選ぶ。

配列は、値を格納できるボックスのようなものです。

于 2009-02-25T19:54:23.077 に答える