2016-10-08 25 views
1

私はこの質問に答えていると確信しています。私はそれを検索するとすべての種類の結果を得ますが、私はこの概念を理解できません。これは宿題であり、なぜ私が投稿しているのか理解しています。割り当ては、ファイルからユーザーの資格情報を読み取り、パスワードをハッシュし、次に役割に関連する別のファイルの表示内容と一致するかどうかを確認することです。Java文字列と文字列[]を別のクラスに渡す

私はこれを1つのクラスに書いて、割り当てが少なくとも2つのクラスを必要とすることを発見しました。だから私は1クラスのファイルを読んで、他のすべてのことを別のクラスで行うことが理にかなっていました。それは1つのクラスとして非常にうまく機能しましたが、これは私の最初のプログラミング冒険であり、6クラスしかありません。私は基本的なことを理解していないので、コードを修正する必要がある理由を教えてください感謝します。私のコードは以下の通りです。

package it145_final; 
import java.util.Scanner; 
import java.io.IOException; 
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 

public class IT145_Final { 

public static void main(String[] args) throws IOException, NoSuchAlgorithmException { 
    Scanner scnr = new Scanner(System.in); 
    Scanner fileIn = null; 
    int failedAttempts = 0; 
    int i = 0; 
    String q = "q"; 
    // objects that I think I need???? Maybe??? but dont know how to get them from the FinalFiles class 
    FinalFiles fileAdmin = new FinalFiles(); 
    FinalFiles fileVet = new FinalFiles(); 
    FinalFiles fileZoo = new FinalFiles(); 
    FinalFiles userA = new FinalFiles(); 
    fileAdmin.file(); 
    userA.file(); 

    while (failedAttempts < 3) 
     {     
      System.out.println("Enter user name, or q to exit"); //get username 
      String userName = scnr.next();  
      if (userName.equalsIgnoreCase(q)) //option to terminiate 
        { 
        System.out.println("Logging Out"); 
        break; 
        } 
      System.out.println("Enter password"); // get password 
      scnr.nextLine(); 
      String userPassword = scnr.nextLine(); 
          //The following takes the entered password and hashes it 
          String hashedPass = userPassword; 
          MessageDigest md = MessageDigest.getInstance("MD5"); 
          md.update(hashedPass.getBytes()); 
          byte[] digest = md.digest(); 
          StringBuffer sb = new StringBuffer(); 
          for (byte b : digest) { 
          sb.append(String.format("%02x", b & 0xff)); 
            } 


       if (userName.equals(userA[i]) && sb.toString().equals(userA[i + 1])) 
       { 
        if (userA[i + 3].equals("admin")) 
        { 
         System.out.println(admin); 
         break; 
        }       
        else if (userA[i + 3].equals("veterinarian")) 
        { 
         System.out.println(veterinarian); 
         break; 

        } 
        else if (userA[i + 3].equals("zookeeper")) 
        { 
         System.out.println(zookeeper); 
         break; 

        } 
        else 
        { 
         System.out.println("Failed attempt"); 
         failedAttempts ++; 
        } 

       } 
       if (userName.equals(userB[i]) && sb.toString().equals(userB[i + 1])) 
       { 
        if (userB[i + 3].equals("admin")) 
        { 
         System.out.println(admin); 
         break; 

        }       
        else if (userB[i + 3].equals("veterinarian")) 
        { 
         System.out.println(veterinarian); 
         break; 
        } 
        else if (userB[i + 3].equals("zookeeper")) 
        { 
         System.out.println(zookeeper); 
         break; 
        } 
        else 
        { 
         System.out.println("Failed attempt"); 
         failedAttempts ++; 
        } 

       } 
       if (userName.equals(userC[i]) && sb.toString().equals(userC[i + 1])) 
       { 
        if (userC[i + 3].equals("admin")) 
        { 
         System.out.println(admin); 
         break; 
        }       
        else if (userC[i + 3].equals("veterinarian")) 
        { 
         System.out.println(veterinarian); 
         break; 
        } 
        else if (userC[i + 3].equals("zookeeper")) 
        { 
         System.out.println(zookeeper); 
         break; 
        } 
        else 
        { 
         System.out.println("Failed attempt"); 
         failedAttempts ++; 
        } 

       } 
       if (userName.equals(userD[i]) && sb.toString().equals(userD[i + 1])) 
       { 
        if (userD[i + 3].equals("admin")) 
        { 
         System.out.println(admin); 
         break; 
        }       
        else if (userD[i + 3].equals("veterinarian")) 
        { 
         System.out.println(veterinarian); 
         break; 
        } 
        else if (userD[i + 3].equals("zookeeper")) 
        { 
         System.out.println(zookeeper); 
         break; 
        } 
        else 
        { 
         System.out.println("Failed attempt"); 
         failedAttempts ++; 
        } 

       } 
       if (userName.equals(userE[i]) && sb.toString().equals(userE[i + 1])) 
       { 
        if (userE[i + 3].equals("admin")) 
        { 
         System.out.println(admin); 
         break; 
        }       
        else if (userE[i + 3].equals("veterinarian")) 
        { 
         System.out.println(veterinarian); 
         break; 
        } 
        else if (userE[i + 3].equals("zookeeper")) 
        { 
         System.out.println(zookeeper); 
         break; 
        } 
        else 
        { 
         System.out.println("Failed attempt"); 
         failedAttempts ++; 
        } 

       } 
       if (userName.equals(userF[i]) && sb.toString().equals(userF[i + 1])) 
       { 
        if (userF[i + 3].equals("admin")) 
        { 
         System.out.println(admin); 
         break; 
        }       
        else if (userF[i + 3].equals("veterinarian")) 
        { 
         System.out.println(veterinarian); 
         break; 
        } 
        else if (userF[i + 3].equals("zookeeper")) 
        { 
         System.out.println(zookeeper); 
         break; 
        } 
        else 
        { 
         System.out.println("Failed attempt"); 
         failedAttempts ++; 
        } 

       } 


     System.out.println("Login Failed"); 
     failedAttempts++; 
     } 







    } 




} 

あなたは、私はいくつかのオブジェクトを作成するために始めた見ることができますが、私はちょうど私の他のクラスからの情報を取得する方法、またはthatsの場合であっても良い方法、把握することはできません。 ファイルを読み込むために作成したクラスは次のとおりです。

package it145_final; 
import java.io.File; 
import java.io.IOException; 
import java.util.Scanner; 


public class FinalFiles { 
    public static void file() throws IOException{ 


    String admin = ""; 
    String veterinarian = ""; 
    String zookeeper = ""; 
    String[] userA = new String[4]; 
    String[] userB = new String[4]; 
    String[] userC = new String[4]; 
    String[] userD = new String[4]; 
    String[] userE = new String[4]; 
    String[] userF = new String[4]; 

     File file0 = new File("C:usercredentials.txt"); // Opens files 
      Scanner contents0 = new Scanner(file0); 
     File file1 = new File("C:admin.txt"); 
      Scanner contents1 = new Scanner(file1); 
     File file2 = new File("C:veterinarian.txt"); 
      Scanner contents2 = new Scanner(file2); 
     File file3 = new File("C:zookeeper.txt"); 
      Scanner contents3 = new Scanner(file3); 

      // Following reads the files and assignes to variables as needed 
      while (contents1.hasNext()) 
       {  
        admin += contents1.nextLine(); 
       } 
      // System.out.println(admin); used to verify that admin was correct 
      while (contents2.hasNext()) 
       {   
        veterinarian += contents2.nextLine(); 
       } 
      while (contents3.hasNext()) 
       {  
        zookeeper += contents3.nextLine(); 
       }    
      while(contents0.hasNext()) 
       {     
        String user1 = contents0.nextLine();//grabs the line from the file for each individual user 
        String user2 = contents0.nextLine(); 
        String user3 = contents0.nextLine(); 
        String user4 = contents0.nextLine(); 
        String user5 = contents0.nextLine(); 
        String user6 = contents0.nextLine(); 
        userA = user1.split("\t");//takes information on user and breaks it into an array      
        userB = user2.split("\t"); 
        userC = user3.split("\t"); 
        userD = user4.split("\t"); 
        userE = user5.split("\t"); 
        userF = user6.split("\t"); 

       System.out.println(userB[0]); //using for testing to make sure I am getting the correct info 
       System.out.println(userB[1]); 

       } 

    } 

}

私はそのきちんと整頓されていない知っていると私は私がこのような何かを書くためのより良い方法があると確信して、私はちょうど私のけれども、何が私が知っていました。私は、誰かがストリング(admin、veterinarian、およびzookeeper)をString []、userA userBなどと一緒に私のメインに渡す方法を私に見せてくれれば、私の主力に戻って、私のスキルレベルの人には十分であると思う。

乾杯 アンディ

+0

あなたはmainメソッドを書きました。 'String []'をどのように順序付けなければならないかを理解しています。 'List 'から 'String []'を作成して渡す必要があるすべてのStringを作成することをお勧めします。 –

答えて

0

あなたは、エントリレベルのコーディングであるように私はあなたが良いアプリケーションを作るために不可欠であるロジックを少し理解を助けるためにしようとするだろう。

自分で簡単にするには、各タスクにクラスが必要だと考えるべきです。あなたの場合は、ファイルを取得するクラスとパスワードを確認するクラスが必要です。アプリケーションを起動し、メインメソッドを含む1つの支配的なクラスが常に存在することに注意してください。

これらの個別のクラスでは、プロセスを分解してコードをより明確にするメソッドを作成する必要があります。パスワードチェッククラスでは、これらの各ジョブ(ファイルの読み取り、パスワードの暗号化、パスワードの解読、お互いの資格情報の確認)のためのメソッドが必要です。

次に、値を最初のクラスに戻します。だから、このようなものになるでしょう。

class Main { //first class 
    public static void main(String[] args){ 
     File = new File("file1"); //obtain file 1 
     File = new File("file2"); //obtain file 2 
     PasswordCheck checker = new PasswordCheck(); // call instance of second class 

     boolean credentialOk= passwordCheck.process(file1,file2)//calls method in second class and returns if the credentials match 
    } 
} 

class PasswordCheck { //second class 
    public passwordCheck(){ 

    }//inistialise class 

    public boolean process(File file1, File file2){ 

    }// method to process the files and returns if match succesfully or not 
} 
+0

私はここであなたが何を言っているのか理解していると思います。私が正しいとすれば、かなりの書き換えが必要です。私が実際にやっていたことをもっとよく理解していれば、私はそれをやってもらえませんでした。上記のコードがうまく動作するには時間がかかりました。私はそれが挑戦されているにもかかわらず、それは私が取った最も楽しいコースの一つであると言うでしょう:)。 提案を受け付けてください。 – along2285

+0

初めはかなり厄介ですが、あなたがそれをつかんだときはあなたは賢者になります。あなたのコードは間違っているわけではありませんが、あなたの要件を満たすのに役立つより良い構造にすることができます。あなたは2つのクラスを持っている必要があるので、私はあなたがすでに持っているものを保持し、私が示したように別のクラスを追加しようとします。 –

関連する問題