2016-03-29 9 views
-1

まず最初にJavaを学び始めました。そして、CやPythonの方が難しいと言えるでしょう。私はプログラミングに熱心ではないので、いくつかのコードの仕組みを理解するのは難しいです。ハッシュのpsedorandom number generatorのプログラミングコードを理解できません

address = (a * Integer.parseInt(ID) + c) % list.length; 

    if((Integer.parseInt(ID)<100000||Integer.parseInt(ID)>999999)||ID.length()==0 || Name.length()==0 || Course.length()==0 || Address.length()==0) 

はそれが何を意味するときに、特定の

public class Pseudo 
{ 
final int a = 2; 
final int c = 3; 
int address; 
String list[][] = new String [100][6]; 



public void AddRecord(String ID, String Name, String Course, String Address, String Email, String Contact) 
{   
    address = (a * Integer.parseInt(ID) + c) % list.length; 

    if((Integer.parseInt(ID)<100000||Integer.parseInt(ID)>999999)||ID.length()==0 || Name.length()==0 || Course.length()==0 || Address.length()==0) 
    { 
     showMessageDialog(null,"The ID number should be in six digit and the particular field should not be empty","",ERROR_MESSAGE); 
    } 

    else{ 

    if(list[address][0]!=null){ 
     showMessageDialog(null,"Collison is occur, the same address is get. Recalculating...............","",WARNING_MESSAGE); 

     while(list[address][0]!=null) 
     {     
      address = (a * address + c) % list.length;    
     } 
    } 

     list[address][0] = ID; 
     list[address][1] = Name; 
     list[address][2] = Course; 
     list[address][3] = Address; 
     list[address][4] = Email; 
     list[address][5] = Contact; 

     showMessageDialog(null,"Student Information " + ID + " will be saved in address: " + address,"",INFORMATION_MESSAGE); 

    } 
} 

のこの1は、混乱が来ます。私がこのコードから理解していることは、IF文の中に1つ以上の条件を持つことができるということです。このようなコードを見るのは初めてのことなので、私はあまりよく分かりません。

第二の衝突が発生した場合、それが格納されたアドレスが再度psedorandom番号ジェネレータを使用して変更が、私は把握することができないこと リスト[住所] [0]でなければならないこの

if(list[address][0]!=null){ 
     showMessageDialog(null,"Collison is occur, the same address is get. Recalculating...............","",WARNING_MESSAGE); 

     while(list[address][0]!=null) 
     {     
      address = (a * address + c) % list.length;    
     } 
    } 

     list[address][0] = ID; 
     list[address][1] = Name; 
     list[address][2] = Course; 
     list[address][3] = Address; 
     list[address][4] = Email; 
     list[address][5] = Contact; 

     showMessageDialog(null,"Student Information " + ID + " will be saved in address: " + address,"",INFORMATION_MESSAGE); 

あります!= null.私はこの行を単に邪魔しています。私は、衝突が発生した場合、その仕事はアドレスを変更することを知っているが、私はこの部分がどのように実行されるかの正確な仕組みを知らない。

答えて

0

私がこのコードから理解していることは、IFステートメントの中には1つ以上の条件を持つことができるからです。

まあ、はい、いいえ。多くの小さな条件に基づいて複雑な条件を構築することはできますが、最終的にはすべてが単一のブール値の真偽結果に解決されなければなりません。

は、この場合には条件を考慮してください。

(Integer.parseInt(ID)<100000||Integer.parseInt(ID)>999999)||ID.length()==0 || Name.length()==0 || Course.length()==0 || Address.length()==0 

は、その成分にそれを打破するのをしてみましょう:

(
    Integer.parseInt(ID)<100000 || 
    Integer.parseInt(ID)>999999 
) || 
ID.length()==0 || 
Name.length()==0 || 
Course.length()==0 || 
Address.length()==0 

それは本当にただ一つの大きな真/偽ステートメントに一緒に比較の束をチェーンです。あなた基本的にこのような何かを読むことができます:(何か)または(他の何か)または(別のもの)、その後...

そして、それぞれのsomething自体はなど、小さなsomething Sを含めることができる場合

全体が1つの真偽結果に解決される限り、括弧でサブ条件をグループ化して、必要な論理条件を複雑なものとして構築することができます。私が把握することはできませんどのような


は、特定の値がnullある場合だけチェックしている

空リスト[アドレス] [0]!=です。この値は、ネストされた(ギザギザの)配列の一部です。したがって、listという変数があります。その変数は配列です。その配列内の各要素は、それ自体、、またの配列です。したがって、一種の2次元配列(しかし、任意のサブ配列が他と同じ長さである必要はないギザギザの配列)になります。コードの特定の部分がaddressインデックスで、listアレイに見え、その値がnullある場合そのサブ配列の0インデックスを見て、チェックすること

+0

最初の部分の疑問を解決してくれてありがとう。しかし、私はまだ2番目の部分の砦を混同しています。これがコードの理解です。コードの特定の部分は、ユーザーが同じコードを入力すると、 ID番号は正しいので、衝突の原因となっている値をチェックしてはいけません。しかし、行は、null値が検出される限り、対応するプロシージャが実装されているように見えます。 –

0

まず、適切にフォーマットされていると、コードの理解はずっと簡単です。良いIDEには、このような機能があります。 Eclipseの場合、IntelliJ IDEA Ctrl + Alt + LのショートカットはCtrl + Shift + Fです。

最初の混乱を解消する最も重要な部分は次のとおりです。 Javaの論理ORです。つまり、IDは100000〜999999の数値でなければならず、属性は空であってはいけません。文字通り、IDが100000より小さいか999999より大きい場合、または値が空の場合、エラーメッセージが表示され、何も行われません。 nullは、変数が設定されていないことを意味します。つまり、エントリが上書きされないように、既に設定されているかどうかを確認することができます。つまり、nullに等しくないことを確認できます。したがって、コードはデータがまだ設定されていないアドレスが見つかるまでaddress変数を変更し、それを使用して指定されたデータを格納します。

このコードにはいくつかの潜在的な問題、その中がある:それは一度呼ばれ、可変

  • 電位はNumberFormatExceptionに格納することができる比較的遅いInteger.parseInt(文字列)に

    • いくつかのコールがIDは番号ではありません(または空である、またはいくつかの余分な空白を持っている)場合
    • 潜在的な無限ループ配列は

    しかし、それはのように見えるようにいっぱいになった場合いくつかのCS宿題は重要ではありません。

  • +0

    最初の部分の疑問を解決してくれてありがとう。しかし、私はまだ2番目の部分を戸惑わせている。これが私のコードの理解である。コードの特定の部分は、ユーザーが同じID番号を入力すると、衝突の原因となっている値をチェックしてはいけません。しかし、行は、null値が検出される限り、対応するプロシージャが実装されているように見えます。 –

    +0

    私はあなたが欠けている細部はかなりわかりません、私はそれが私の説明の一部であることを願っています:)アドレスは、対応するセルが空でない限り、更新されます。それは配列内の空の場所を探しています。 !=(等しくないことを意味する)と、割り当ての両側にある 'address'変数に注意してください。これは、各反復後に別の値があることを意味します。 – Chris

    +0

    オハイオ州私はそれを取得します。衝突が起きた場合、このコード行は新しいアドレスを見つけることになります!= nullは空のアドレスを調べることです。今すぐ入手してください...少しゆっくりしても大変申し訳ありません。 –

    0

    Davidさん、ありがとうございました。私は最初の部分を理解していますが、お互いに積み重ねることができますし、これを使用すると真または偽の終了が保証されるため、理解できるものは||(OR)文でのみ機能します。

    while(list[address][0]!=null) 
    

    しかし、私はまだ私の問題のパート2についてちょっと混乱しています。その行は、配列が正しい値を意味しないことをチェックすることです。これは状況の私の理解です。コードの特定の部分は、ユーザーが同じID番号を入力すれば衝突を解決すると仮定します。衝突の原因となっている値をチェックします。しかし、行は、null値が検出される限り、対応するプロシージャが実装されているように見えます。

    関連する問題