Как создать переменную publi c в цикле for - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь получить результат внутри моего for l oop, который будет отображаться в конце программы

import java.util.Scanner;

public class HELLOwORLD {
    public static void main(String[] args) {
        String answerclient = null;
        Scanner keyboard = new Scanner(System.in);
        System.out.println("How long the password should be?");
        int answer = keyboard.nextInt();

        do {
            System.out.print("Generating new password ...\n\n\n");
            for(int i = 0; i < answer; i++)

            {

                int character = (int)(Math.random() * 93 + 33);
                char ch = (char)character;
                System.out.print(ch);


            } 
            System.out.print("\n Generate another password ? (Y/N)\n");
            answerclient = keyboard.next();
        }
        while (answerclient.equalsIgnoreCase("Y"));

        System.out.print("your new password is" + ch); //this would be the latest password generated before the user said N to Generate another password ? (Y/N).

    }
}

Я бы отобразил в конце последний пароль, сгенерированный до того, как пользователь сказал N. Может ли кто-нибудь помочь мне, чтобы этот пароль отображался в конце моей программы, пожалуйста?

Ответы [ 3 ]

0 голосов
/ 27 мая 2020

Здесь диапазон char ограничен l oop. Вам необходимо объявить переменную перед l oop, чтобы текущее значение переменной было доступно извне l oop. Исправленный код:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class HELLOwORLD {
    public static void main(String[] args) {
        String answerclient = null;
        Scanner keyboard = new Scanner(System.in);
        System.out.println("How long the password should be?");
        int answer = keyboard.nextInt();
        List<String> password ;
        int count = 0;
        do {
            System.out.print("Generating new password ...\n\n\n");
            password = new ArrayList<>() ;
            String temppassword = "";
            for (int i = 0; i < answer; i++) {

                int character = (int) (Math.random() * 93 + 33);
                char ch = (char) character;
                System.out.print(ch);
                temppassword = temppassword + ch;

            }
            System.out.print("\n Generate another password ? (Y/N)\n");
            answerclient = keyboard.next();
            password.add(temppassword);
            count++;
        } while (answerclient.equalsIgnoreCase("Y"));
        for (int i = 0; i < password.size(); i++) {
            if (password.get(i) != null &&  !password.get(i).isEmpty())
                System.out.print("your " + i + " new password is : " + password.get(i) + "\n");
        }
    }
}
0 голосов
/ 27 мая 2020

Если длина пароля, введенного пользователем, больше 1, тогда было бы неплохо использовать либо массив символов, либо строку для хранения вашего пароля.

Я покажу это с помощью строки:

Объявить строку вне вашего do / while l oop

String password = "";

Затем продолжайте добавлять новый сгенерированный символ в ваш пароль.

password = password + Character.toString(ch) ;

Затем в конце кода распечатайте свой пароль:

System.out.println(password) ;
0 голосов
/ 27 мая 2020

Переменная должна быть объявлена ​​вне (re: before) ваших циклов, чтобы она была доступна за пределами указанных циклов. Как есть, переменная является локальной для l oop и не будет существовать после завершения l oop.

Изменить: Что касается вашего комментария - объявление также должно быть перед do / while.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...