Ошибка цифровой подписи BlueJ

Я сделал программу для вопроса:

Напишите программу на Java для ввода имени, отчества и фамилии. Проверьте цифровую подпись, содержащую имя и фамилию. Если подпись не содержит ничего из перечисленного, выведите «Invalid Signature». Кроме того, выведите его полное имя в одну строку.

Программа, которую я написал для этого:

import java.io.*;
import java.io.*;
public class TaskPE_4
{
    public static void main(String args[])throws IOException
    {
        BufferedReader read=
              new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter your first name");
        String fn=read.readLine();
        System.out.println("Enter your middle name");
        String mn=read.readLine();
        System.out.println("Enter your last name");
        String ln=read.readLine();
        System.out.println("Enter your digital signature");
        String ds=read.readLine();
        ds+=" ";
        if(fnCheck(fn, ds)&&lnCheck(ln, ds))
            System.out.println("Valid Digital Signature");
        else
            System.out.println("Invalid Digital Signature");
        System.out.println("Your full name is "+fn+" "+mn+" "+ln+".");
    }

    private static boolean fnCheck(String fn, String ds)
    {
        int fnl=fn.length();
        int dsl=ds.length();
        for(int i=0; i<=(dsl-fnl); i++)
            if((ds.substring(i, (i+fnl))).equals(fnl))
                return true;
        return false;
    }

    private static boolean lnCheck(String ln, String ds)
    {
        int lnl=ln.length();
        int dsl=ds.length();
        for(int i=0; i<=(dsl-lnl); i++)
            if((ds.substring(i, (i+lnl))).equals(lnl))
                return true;
        return false;
    }
}

Показанный вывод:

Enter your first name
Rachit
Enter your middle name
Rachit
Enter your last name
Bhargava
Enter your digital signature
Rachit Bhargava
Invalid Digital Signature
Your full name is Rachit Rachit Bhargava.

Пожалуйста, помогите мне отладить эту программу.


person user3857228    schedule 20.07.2014    source источник
comment
что вы имеете в виду, говоря, помогите мне отладить эту программу? вы получаете какую-либо ошибку?   -  person Kick Buttowski    schedule 20.07.2014
comment
да! место, где он показывает недействительную цифровую подпись. это оказалось действительной цифровой подписью.   -  person user3857228    schedule 20.07.2014
comment
Можете ли вы объяснить, как функционируют частные функции fnCheck и inCheck? чего вы пытаетесь добиться ими?   -  person Kick Buttowski    schedule 20.07.2014
comment
я не хочу, чтобы функции fnCheck и lnCheck были доступны извне программы. Итак, я сделал их частными!   -  person user3857228    schedule 20.07.2014
comment
нет, я это знаю, но что они пытаются сделать? если ваш ds состоит из fn и ls, я думаю, это проще проверить? я правильно понял суть ds?   -  person Kick Buttowski    schedule 20.07.2014
comment
извините, но я вас не понял. Что ты пытаешься сказать?   -  person user3857228    schedule 20.07.2014
comment
посмотри на мой ответ он тебе поможет?   -  person Kick Buttowski    schedule 20.07.2014
comment
нет, если я не предоставлю функции с цифровой подписью, как они будут проверять, есть ли имя и фамилия в цифровой подписи или нет?   -  person user3857228    schedule 20.07.2014
comment
нет необходимости, вы можете проверить это с помощью функций contains. посторонние не знают, как вы проверяете свой ds. они?   -  person Kick Buttowski    schedule 20.07.2014
comment
ты просто пытаешься усложнить себе жизнь   -  person Kick Buttowski    schedule 20.07.2014
comment
это задание дал мне мой учитель. он собирается проверить это и обязательно задаст мне этот вопрос. пожалуйста, ответьте на мой вопрос, как функции получат цифровую подпись, и я выберу ваш ответ.   -  person user3857228    schedule 20.07.2014
comment
ваш учитель дал вам эти функции?   -  person Kick Buttowski    schedule 20.07.2014
comment
ой. :P Теперь я понял. Спасибо за помощь.   -  person user3857228    schedule 20.07.2014
comment
что случилось, что ты передумал?   -  person Kick Buttowski    schedule 20.07.2014
comment
я не смотрел, что вы добавили .contains. Я думал, что вы предоставляете функции только с помощью fn или ln. Большое спасибо за помощь! :)   -  person user3857228    schedule 20.07.2014
comment
Рад был помочь. удачи и не усложняйте себе жизнь :)   -  person Kick Buttowski    schedule 20.07.2014


Ответы (1)


Я думаю, вам следует это сделать, если я правильно отвечу на ваш вопрос

Вместо использования этих функций для проверки вашей цифровой подписи вы должны использовать функцию contains(), чтобы проверить, состоит ли цифровая подпись из имени и фамилии.

Код:

if (ds.contains(fn)&& ds.contains(ln)) {
            System.out.println("Valid Digital Signature");
        } else {
            System.out.println("Invalid Digital Signature");
        }

Выход:

Enter your first name
Rachit
Enter your middle name
Rachit
Enter your last name
Bhargava
Enter your digital signature
Rachit Bhargava
Valid Digital Signature
Your full name is Rachit Rachit Bhargava.

Источники:

String.contains в Java

person Kick Buttowski    schedule 20.07.2014