Jump out of a while loop - java

I've a problem with my while loop.
It works fine if the while loop conditions is false(when the password is wrong), but when the password is right it writes both You are logged in and Wrong password.
I understand why it does so but I don't understand how to solve the problem. I need to use a while loop because it's a school assignment that requires it.
import java.util.Scanner;
public class Password {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String rightPassword = "Hello123";
System.out.println("Write your password: ");
String scan = scanner.nextLine();
while(scan.equals(rightPassword)){
System.out.println("You are logged in");
break;
}
System.out.println("Wrong password");
}
}

What you should have done is :
import java.util.Scanner;
public class Password {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String rightPassword = "Hello123";
String scan="";
while(true){
System.out.println("Write your password: ");
scan = scanner.nextLine();
if(scan.equals(rightPassword)) {
System.out.println("You are logged in");
break;
} else {
System.out.println("Wrong password");
}
}
}
}
In this what we do is we have an endless for loop which will not break until you supply the right password. You can add some kin of number of tries to this as a breaking condition too.
Based on the comment I know, it become a infinite loop and that's why i use break. My requirement is that i must use a While loop. I know how to use a if-loop to solve the problem. Your solution should look like :
import java.util.Scanner;
public class Password {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String rightPassword = "Hello123";
System.out.println("Write your password: ");
while(!rightPassword.equals(scanner.nextLine())) {
System.out.println("Wrong password");
System.out.println("Write your password: ");
}
System.out.println("You are logged in");
}
}

You can use below code.
int a=1;
Scanner scanner = new Scanner(System.in);
String rightPassword = "Hello123";
System.out.println("Write your password: ");
String scan = scanner.nextLine();
while(scan.equals(rightPassword)){
System.out.println("You are logged in");
a=0;
break;
}
if(a==1){
System.out.println("Wrong password");
}

without changing your code this will help you.
import java.util.Scanner;
public class Password {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String rightPassword = "Hello123";
System.out.println("Write your password: ");
String scan = scanner.nextLine();
while(scan.equals(rightPassword)){
System.out.println("You are logged in");
break end;
}
System.out.println("Wrong password");
end:
}
}

You may have a couple of things backwards. Check for a wrong password, not a right one in the loop, and ask for their password again. This way you will receive one message from the system and that's a bad password, or a good one once they 'successfully log in'.
import java.util.Scanner;
public class Password {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String rightPassword = "Hello123";
System.out.println("Write your password: ");
String scan = scanner.nextLine();
while(!scan.equals(rightPassword)){
System.out.println("Wrong password. Please try again");
System.out.println("Write your password: ");
String scan = scanner.nextLine();
}
System.out.println("You are logged in");
}
}

Related

Adding a password and a section for a message after logging-in

i'm thinking of adding a password on my code and also a section where I could insert a message after logging-in. I am still new on how things work on Java so I kindly need your help to this project.
Here is my code:
import java.util.Scanner;
public class Lab2_PreFinal {
public static void main(String[] args) {
Scanner sc = new Scanner (System.in);
boolean t = true ;
System.out.println("Enter your student number: ");
String studentNum = sc.nextLine();
if(studentNum.matches("[0-9]{4}-[0-9]{2}-[0-9]{3}") == t) {
System.out.println("You have successfully logged in! ");
} else {
System.out.print("Your student number is incorrect. Please try again.");
}
}
}
Thank you.

if and else statements JAVA

I'm practicing if and else statements and i did a guess your password string, if you input the right password a congratulation message appears but if you enter the wrong one another message appears that says "Please try again" the issue that im having is that i dont know how to set another congratulation message if the user guess the right password on try again.
public static void main(String[] args) {
String password = "Shippuden345";
System.out.println("Enter or guess the password: ");
Scanner scanner = new Scanner(System.in);
String guess = scanner.nextLine();
System.out.println(password.equals(guess));
if (password.equals(guess)) {
System.out.println("Your guess was correct");
return;
}
else;
{
System.out.println("Please try again: ");
Scanner scanner1 = new Scanner(System.in);
String again = scanner1.nextLine();
}
}
}
i want to set another message in here, if the user guess the password correctly after trying again.
else;
{
System.out.println("Please try again: ");
Scanner scanner1 = new Scanner(System.in);
String again = scanner1.nextLine();
}
}
}
It would be best if you used a do while loop:
public static void main(String[] args) {
String password = "Shippuden345";
String guess;
do{
System.out.println("Enter or guess the password: ");
guess = scanner.nextLine();
System.out.println(password.equals(guess));
if (password.equals(guess)) {
System.out.println("Your guess was correct");
return;
}
else {
System.out.println("Please try again: ");
}
}while(!password.equals(guess));
}
I have edited your code. However, I have added it to a static void:
I have also added an int to be shown if the first attempt was incorrect. Hope you like it.
class s{
public static void check(){
int attempts = 0;
String password = "Shippuden345";
System.out.println("Enter or guess the password: ");
Scanner scanner = new Scanner(System.in);
String guess = scanner.nextLine();
System.out.println(password.equals(guess));
while(attempts < 5){
if (password.equals(guess) && attempts == 0) {
System.out.println("Your guess was correct");
return;
}
else
if (password.equals(guess) && attempts > 0) {
System.out.println("Attempt number "+attempts+" was correct.");
return;
}
else{
System.out.println("Please try again: ");
attempts++;
guess = scanner.nextLine();
}
}
}
public static void main(String[] args) {
check();
}
}```
You can put the input and processing of the input value inside an infinite loop (e.g. while(true){}) which you can break on the correct input.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String password = "Shippuden345";
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("Enter or guess the password: ");
String guess = scanner.nextLine();
if (password.equals(guess)) {
System.out.println("Your guess was correct");
break;
} else {
System.out.println("Please try again: ");
}
}
}
}
A sample run:
Enter or guess the password: aSD
Please try again:
Enter or guess the password: 12H
Please try again:
Enter or guess the password: Shippuden345
Your guess was correct
You can use a loop that starts after the first guess of passwords if the guess is incorrect and continues the loop if passwords entered in the following trials are incorrect.
Then breaks the loop when the password matches and prints the congratulate message.

Is it possible detect single enterkey with java.util.Scanner?

I am trying to write a terminal-based toy app, which allows user to input product category and inventory.
Is it possible to implement a feature of pressing enter key to input the default inventory.
Here is the procedure/steps
app print "product category:"
user input a category, such as shoe
app print "Inventory(press enter key for 999):"
user press enterkey or input another number
app print product_category + product_inventory
here is my code
import java.util.Scanner;
public class ProductScanner {
public static void main(String[] args) {
System.out.print("product category: ");
Scanner scanner = new Scanner(System.in);
String product_category = scanner.next();
System.out.print("Inventory(press enter key for 999): ");
int product_inventory = scanner.nextInt();
scanner.close();
System.out.println(String.format("%s, %d", product_category, product_inventory));
}
}
this code does not support "enterkey for default" feature.
quesion
is it possible detect single enterkey with java.util.Scanner to implement the default input?
I also tried this code, even worse
import java.util.Scanner;
public class ProductScanner {
public static void main(String[] args) {
System.out.print("product category: ");
Scanner scanner = new Scanner(System.in);
String product_category = scanner.next();
scanner.close();
System.out.print("Inventory(press enter key for 999): ");
scanner = new Scanner(System.in);
String product_inventory_str = "999";
if(scanner.hasNext()){
System.out.println("hasNext");
product_inventory_str = scanner.nextLine();
}
else{
System.out.println("does not have Next");
}
int product_inventory = 999;
if(product_inventory_str.isEmpty()){
System.out.println("isEmpty");
}
else{
product_inventory = Integer.parseInt(product_inventory_str);
}
scanner.close();
System.out.println(String.format("%s, %d", product_category, product_inventory));
}
}
You could always read an entire line (because user will have to press Enter anyway) and then decide what to do with it, something like this:
public static void main(String[] args) {
System.out.print("product category: ");
Scanner scanner = new Scanner(System.in);
String product_category = scanner.nextLine();
System.out.print("Inventory(press enter key for 999): ");
String pi_string = scanner.nextLine();
int product_inventory = pi_string.isEmpty()?
999:Integer.parseInt(pi_string);
scanner.close();
System.out.println(String.format("%s, %d",
product_category, product_inventory));
}

Java Secret Word

I was given a assignment for my Intro to Computer Science class to make the user enter any word until they guess the secret word, once they get the secret word then the system will say "Stop!" So far I have the user trying once and I want the program to continue looping until the user enters the right word. I really need some help, this is what I have so far.
import java.util.Scanner;
public class HW2
{
public static void main(String[] args)
{
String input; //The users input
// New Scanner for keyboard input
Scanner keyboard = new Scanner(System.in);
//Tell the user to guess the word
System.out.print("Guess the secret word: ");
input = keyboard.nextLine();
if(input.equalsIgnoreCase("college"))
{
System.out.print("Stop !");
}
}
}
All you need is a do-while loop.
import java.util.Scanner;
public class HW2
{
public static void main(String[] args)
{
String input; //The users input
boolean hasGuessedCorrectly = false;
// New Scanner for keyboard input
Scanner keyboard = new Scanner(System.in);
//Tell the user to guess the word
do
{
System.out.print("Guess the secret word: ");
input = keyboard.nextLine();
if (input.equalsIgnoreCase("college"))
{
hasGuessedCorrectly = true;
System.out.print("Stop !");
}
} while (!hasGuessedCorrectly);
}
}
A do-while loop could be used for this task:
import java.util.Scanner;
public class Main {
private static final String SECRET_WORD = "college";
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
do {
System.out.print("Guess the secret word: ");
} while (!SECRET_WORD.equalsIgnoreCase(keyboard.nextLine()));
System.out.println("Stop!");
}
}
Live demo
Consider the while loop:
import java.util.Scanner;
public class HW2
{
public static void main(String[] args)
{
String input = ""; //The users input
// New Scanner for keyboard input
Scanner keyboard = new Scanner(System.in);
// The below code is run until the secret word is guessed.
while (!"college".equalsIgnoreCase(input))
{
//Tell the user to guess the word
System.out.print("Guess the secret word: ");
input = keyboard.nextLine();
/* if(input.equalsIgnoreCase("college"))
{
System.out.print("Stop !");
} This code is no longer necessary, as we have put the stop
condition in the while loop declaration. */
}
// This only runs after the loop has finished
System.out.println("Stop !");
}
}

Loop from a specific point to another point in Java?

I'm working on a project in Java that is kind of like a digital time-machine, it basically saves what happened on a specific sate, archives it to a specific file, and stores it in a directory somewhere for safe keeping. Right now I'm working on a password function. I have the basics down for checking if it's right or wrong, but when I input the wrong answer, the class ends after saying "Invalid Password".
Is there a way to have it loop from the end of else statement to the beginning of main so I don't have to re-execute the class everytime?
import java.util.Scanner;
import java.util.*;
public class Adam {
public static void main(String args[]) {
String passwrd = "password";
String inputPassword;
System.out.print("Please Input Password ");
Scanner sc = new Scanner(System.in);
inputPassword = sc.nextLine();
if (inputPassword.equals(passwrd)) {
System.out.println("Password Accepted, Loading Archive...");
} else {
System.out.println("Invalid Password");
}
}
}
You can use a do while loop, if user input is invalid then continue the loop else not.
import java.util.Scanner;
import java.util.*;
public class Adam {
public static void main(String args[]) {
String passwrd = "password";
String inputPassword;
boolean b = true;
Scanner sc = new Scanner(System.in);
do {
System.out.print("Please Input Password ");
inputPassword = sc.nextLine();
if (inputPassword.equals(passwrd)) {
System.out.println("Password Accepted, Loading Archive...");
b = false;
} else {
System.out.println("Invalid Password");
b = true;
}
} while (b);
}
}
DEMO
Whenever you want to run some code, check the result and then repeat if necessary the most obvious structure is do while.
Something like the following:
String inputPassword = null;
do {
if (inputPassword != null)
System.out.println("Invalid password");
System.out.println("Enter password");
inputPassword = sc.nextLine();
} while (!inputPassword.equals(password));
public static void main(String args[]) {
String password = "password";
String inputPassword;
while(inputPassword == null || !inputPassword.equals(password)){
System.out.print("Please Input Password ");
Scanner sc = new Scanner(System.in);
inputPassword = sc.nextLine();
if (!inputPassword.equals(password)) {
System.out.println("Invalid Password");
}
}
System.out.println("Password Accepted, Loading Archive...");
}
It's a good idea to have a limited number of tries to input the password. For example to have three tries to enter password, you'd have this code:
Scanner sc = new Scanner(System.in);
for (i = 0; i < 4; ++i) {
System.out.print("Please Input Password ");
inputPassword = sc.nextLine();
if (inputPassword.equals(passwrd)) {
System.out.println("Password Accepted, Loading Archive...");
break;
}
else {
System.out.println("Invalid Password");
}
}
Just put whole code into while(true) loop which you will break if password is walid
public static void main(String args[])
{
String passwrd = "password";
String inputPassword;
while(true)
{
System.out.print("Please Input Password ");
Scanner sc = new Scanner(System.in);
inputPassword = sc.nextLine();
if (inputPassword.equals(passwrd))
{
System.out.println("Password Accepted, Loading Archive...");
break; //here you are getting out of loop
}
else
{
System.out.println("Invalid Password");
//you are not breaking loop so the program will return to the beggining
}
}
}
I have added one while loop and one flag in your program. Please have a look:
public static void main(String[] args) {
String passwrd = "password";
boolean wrongPassword = true;
while(wrongPassword){
String inputPassword;
System.out.print("Please Input Password ");
Scanner sc = new Scanner(System.in);
inputPassword = sc.nextLine();
if (inputPassword.equals(passwrd)) {
System.out.println("Password Accepted, Loading Archive...");
wrongPassword = false;
}
else {
System.out.println("Invalid Password");
}
}
}
use a do-while loop :
String passwrd = "password";
String inputPassword ="";
Scanner sc = new Scanner(System.in);
do{
System.out.print("Please Input Password ");
// get the password from user
inputPassword = sc.nextLine();
// if password matches print success and break out of loop
if (inputPassword.equals(passwrd)) {
System.out.println("Password Accepted, Loading Archive...");
break;
}
else{
System.out.println("Invalid Password");
}
}while(true);
Use a do-while loop. Also, your code has some security issues:
Don't use System.in for passwords. Use Console instead. (However, if you run the program from an IDE, you may not have a Console. In that case, use a GUI method instead.)
Hash your password straight after you input it.
Clear your password buffer as soon as possible after input (i.e. overwrite it). See Console documentation.
Console con = System.console();
if (con == null)
throw new IOException("This JVM has no console");
boolean pwdCorrect;
do {
char[] inputPassword = con.readPassword("Please input password: ");
String hashedInputPassword = hashPassword(inputPassword); // search Internet for how to hash a password
for (int i = 0; i < inputPassword.length; i++)
inputPassword[i] = '\0';
pwdCorrect = isValidPassword(hashedInputPassword); // e.g. by looking it up in a password file
if (pwdCorrect)
System.out.println("Password accepted. Loading archive...");
else
System.out.println("Invalid password.");
} while (!pwdCorrect);

Categories