Shawn Jackett
Shawn Jackett

Reputation: 1

Looping in Java(Beginners)

I have to use a loop in my code so that when someone enters yes, they can re-enter their names as many times as they want, but I have no idea how to do this. Any help is appreciated, here is my code:

public static void main(String [] args)
  {
    // Create a Scanner object to read input.
    Scanner keyboard = new Scanner(System.in);

    //Get the user's name.
    System.out.print("What is your name?");
    String name = keyboard.nextLine();
    System.out.println("Hello there," + name);

    System.out.println("Would you like to enter another name? Please enter Yes Or No.");
    String reply = keyboard.nextLine();

    if (reply == "yes")
    {

    }
  }
}

Upvotes: 0

Views: 302

Answers (5)

Bizmarck
Bizmarck

Reputation: 2698

Use a do-while loop:

public static void main(String[] args) {

        // Create a Scanner object to read input.
        Scanner keyboard = new Scanner(System.in);
        do {
            //Get the user's name.
            System.out.print("What is your name?");
            String name = keyboard.nextLine();
            System.out.println("Hello there," + name);
            System.out.println("Would you like to enter another name? Please enter Yes Or No.");

        } while (keyboard.nextLine().equalsIgnoreCase("yes"));

        System.out.println("Bye!");
        keyboard.close();
      }
    }

Upvotes: 2

meriton
meriton

Reputation: 70574

The simplest (and probably clearest) way is to wrap what you want to repeat in a do-while statement:

public static void main(String [] args)
  {
    // Create a Scanner object to read input.
    Scanner keyboard = new Scanner(System.in);

    String reply;
    do {
        //Get the user's name.
        System.out.print("What is your name?");
        String name = keyboard.nextLine();
        System.out.println("Hello there," + name);

        System.out.println("Would you like to enter another name? Please enter Yes Or No.");
        reply = keyboard.nextLine();

    } while ("yes".equals(reply));
  }
}

The reply variable must be declared before the block, because it is accessed in the loop condition (a variable is only visible in the block it is declared in, so if reply were declared in the loop, it would not be available to the loop condition).

I changed the loop condition because the == operator compares Strings by reference, i.e. it will check whether both sides point to the same String object. The equals method, in contrast, checks that the content of the Strings is equal (i.e. they contain the same characters in the same order).

Upvotes: 0

MadProgrammer
MadProgrammer

Reputation: 347314

This reply == "yes" is not how you compare Strings in Java. This compares there memory locations, not there contents (and it's unlikely there memory locations are going to be equal).

Instead you need to use reply.equals("yes") or if you don't care about doing a case comparison, you can use reply.equalsIgnoreCase("yes") instead

do {
    // The remainder of your code...
} while (reply.equalsIgnoreCase("yes"));

Updated

You may also wish to have a read through The while and do-while statements and The for Statement, which covers the basics of looping in Java

Upvotes: 7

syb0rg
syb0rg

Reputation: 8247

I think this will work (untested):

public static Scanner keyboard = new Scanner(System.in); // global

    public static void main(String [] args)
    {
        getName();
    }

    public static void getName()
    {
        System.out.print("What is your name?");
        String name = keyboard.nextLine();
        System.out.println("Hello there," + name);
        rerun();
    }

    public static void rerun()
    {
        System.out.println("Would you like to enter another name? Please enter \"yes\" or \"no\".");
        String reply = keyboard.nextLine();

        if (reply.equals("yes")) getName();
        else System.exit();
    }

}

First we call the getName() method and run through that once. Then we make a call to the rerun() method. This method will test if we want to re-run the program. If the user types in "yes", then we repeat the whole process. If we type in anything besides "yes", the program quits.

Besides the fact that your code is unfinished, the only real problem with your code is that you try to compare strings with the == operator. See MadProgrammer's answer as to why that is wrong.

Upvotes: 0

Carl Cooter
Carl Cooter

Reputation: 3

use this

import java.util.*;
public class prob13 {
public static void main(String [] args)
  {
    // Create a Scanner object to read input.
    Scanner keyboard = new Scanner(System.in);

    //Get the user's name.
    while(true){
        System.out.print("What is your name?");
        String name = keyboard.nextLine();
        System.out.println("Hello there," + name);

        System.out.println("Would you like to enter another name? Please enter Yes Or No.");
        String reply = keyboard.nextLine();

        if(reply.equals("no"))
            break;
    }
 }
}

The reason for this is to loop through as long as the answer is not no.

or you could use this if you want the answer to always be yes

import java.util.*;
public class prob13 {
public static void main(String [] args)
  {
    // Create a Scanner object to read input.
    Scanner keyboard = new Scanner(System.in);
        String reply="yes";
    //Get the user's name.
    while(reply.equals("yes")){
        System.out.print("What is your name?");
        String name = keyboard.nextLine();
        System.out.println("Hello there," + name);

        System.out.println("Would you like to enter another name? Please enter Yes Or No.");
        reply = keyboard.nextLine();

    }
 }
}

Upvotes: 0

Related Questions