为什么我的二进制搜索找不到我为我的字符串数组生成的密码?

时间:2016-03-09 04:42:14

标签: java eclipse

import java.util.*;
import java.io.*;


public class A3 {

    public static void main(String args[])
    {   
        Accept inputScanner = new Accept(); 
        Assign3 sortObj = new Assign3();

        String lname[] = {"","","","",""};
        String psw[] = {"","","","",""};
        String input;

            do
            {   
                System.out.println("Password Generator");           
                System.out.println("Please enter 5 last names:");

                for (int index = 0; index < lname.length; index++)
                {
                    System.out.print("Please enter last name: ");
                    lname[index] = inputScanner.acceptInputString();
                    psw[index] = sortObj.generatePassword(lname, index);                     
                }

                sortObj.sortArrayDescending(lname);             
                sortObj.arrayDisplay(lname, psw);

                Screen.scrollscreen(70, 1, '=');
                System.out.print("Please enter name to search (e or E to exit):");
                input = inputScanner.acceptInputString();
                int password = sortObj.binSrch(lname, input);

                if(password >= 0)
                {                   
                    System.out.println("Name: " + input + " ===> " + "password: " + password);
                    System.out.println("++++++++++++++++++++++++++++++++++");
                }
                else
                {
                    System.out.println(input + " is not found");
                    System.out.println("++++++++++++++++++++++++++++++++++");
                }

            }while(input.equals("e") && input.equals("E")); 
    }


    public void sortArrayDescending(String[] lnameArray)
    {   String temp;

        for(int j = 1; j < lnameArray.length - 1; j++)
        {
            for(int index = 0; index < lnameArray.length - 1; index++)
            {
                if(lnameArray[index].trim().compareTo(lnameArray[index+1].trim())<0)
                {
                    temp = lnameArray[index];
                    lnameArray[index] = lnameArray[index + 1];
                    lnameArray[index + 1] = temp;
                }
            }                
        }
    }

    public void arrayDisplay(String lnameContent[], String pswContent[])
    {
        for(int i = 0; i < lnameContent.length; i ++)
        {
            System.out.println(lnameContent[i] + "      "  +  pswContent[i]);
        }
    }

    public int binSrch(String strArr[], String search)
    {           
            int mid = -1;
            int first = 0;
            int last = strArr.length - 1;
            boolean found = false;

            while(first <= last)
            {   
                mid = (first + last) / 2;

                if(strArr[mid].equalsIgnoreCase(search))
                {
                    found = true;
                    break;
                }
                else if(strArr[mid].compareToIgnoreCase(search) < 0)
                {
                    last = mid - 1; //use lower half
                }
                else
                {
                    first = mid + 1; //use upper half
                }
            }

            if(!found)
            {
                mid = -1;   
            }

            return mid;

    }

    public String generatePassword(String[] str, int index)        
    {   
        String name = str[index];
        char first = name.charAt(0);
        char last = name.charAt(name.length()-1);
        int mid = 0;

        if(first != last)
        {
            mid = ( ((int)(first) + ((int)(last)) / 2) );
        }
        else 
        {
            mid = ( ((int)(first) + ((int)(last)) / 3) );
        }

        Random rNum = new Random();
        int randomNum = rNum.nextInt(5);
        String password = (first + "" + (char)(mid) + "" + randomNum).toLowerCase();

        return password;
    }

    public void duplicateCheck(String[] password)
    {

    }
}

输出

Password Generator
Please enter 5 last names:
Please enter last name: magnum
Please enter last name: bauer
Please enter last name: sahid
Please enter last name: austen
Please enter last name: reese
sahid       m?0
reese       b?0
magnum      s¥4
bauer       a?0
austen      r¤0
======================================================================
Please enter name to search (e or E to exit):sahid

Name: sahid ===> password: 0     

++++++++++++++++++++++++++++++++++

//this line is supposed to print out "m?0" because it is the password
为&#34; sahid&#34;生成的

那为什么要打印&#34; 0&#34;?我该怎么做呢

打印出来&#34; m?0&#34;或者我的程序为它生成的随机密码?

1 个答案:

答案 0 :(得分:0)

您的代码是正确的。请记住,passwordpsw[]字符串数组的索引,而不是数组的实际内容。

您只需在以下行中写下psw[password]而不是password

System.out.println("Name: " + input + " ===> " + "password: " + password); 
/* Correction Here : Replace password --> psw[password] */

更正了代码段:

if(password >= 0)
{                   
    System.out.println("Name: " + input + " ===> " + "password: " + psw[password]);
    System.out.println("++++++++++++++++++++++++++++++++++");
}

现在,您应该按如下方式获得输出:

Name: sahid ===> password: m?0

编辑:另外,正如@Gyanapriya所提到的,除了psw[]之外,您还必须对lname[]数组进行排序,除非您尝试分配随机数用户密码。