Shopping List application I'm new to java and was just wondering if you could see anything wrong with my code. The program works but I have a feeling it's not the right way to do it.

public class ShoppingItem {

private String ItemName;
    private double ItemPrice;
    private int ItemQty;

public ShoppingItem()
{
        ItemName = "Fruit";
        ItemPrice = 100;
        ItemQty = 1;

}

    public ShoppingItem(String ItemName, double ItemPrice, int ItemQty )
{
        this.ItemName = ItemName;
        this.ItemPrice = ItemPrice;
        this.ItemQty = ItemQty;

}


public String getItemName() {
    return ItemName;
}

public double getItemPrice() {
    return ItemPrice;
}

public double getItemTotalPrice() {
    return ItemPrice * ItemQty;
}

public int getItemQty() {
    return ItemQty;
}

public void setItemName(String ItemName)
{
    this.ItemName = ItemName;
}

    public void setItempPrice(double ItemPrice)
{
    this.ItemPrice = ItemPrice;
}

    public void setItemQty(int ItemQty)
{
    this.ItemQty = ItemQty;
}


    @Override
public String toString()
{
    String state = ItemName + " -  €" + ItemPrice + " x " + ItemQty;
    return state;
}
}




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

public class ShoppingList {

    ArrayList&lt;ShoppingItem&gt; list = new ArrayList&lt;ShoppingItem&gt;();
    //Add a new ShoppingItem to the list
         public void addItem()
    { 
            System.out.println();
            System.out.println("enter in the name of your item");
            Scanner keyboard = new Scanner(System.in);
            String ItemName = keyboard.nextLine();

            System.out.println("enter in the price of your item");
            double ItemPrice = keyboard.nextDouble();

            System.out.println("enter in the Qty of your item");
            int ItemQty = keyboard.nextInt();

            ShoppingItem Item = new ShoppingItem(ItemName, ItemPrice,
                        ItemQty);
            list.add(Item);
            System.out.println("Item Added");
    }

    //Display list and total number of items. 
         public void displayItem(){
             System.out.println( list.size()+ " items. ");
                for (ShoppingItem x : list) {
                    System.out.println(x.toString());
                }

                 }



 }




import java.util.Scanner;
public class Application {

    public static void main( String [] args) { 
        Scanner input = new Scanner(System.in);
        ShoppingList myList = new ShoppingList();
        int userOpt = 0;
        while (userOpt != 3) {
            System.out.println("");
            System.out.println("----- Shopping List------");
            System.out.println("(1) Add an item to the list. ");
            System.out.println("(2) Display list and total number of items. ");
            System.out.println("(3) Exit. ");
            userOpt = input.nextInt();  

            if (userOpt == 1) {
            myList.addItem();

            }

            if (userOpt == 2) {
            myList.displayItem();
            }
        }
    }
}
janos already pointed out some important issues. I'm just going to add a few

Separate concerns

A ShoppingList is a shopping list, nothing more. It could be simply a wrapper around a List with maybe some additional convenience functions. It shouldn't be responsible for creating items from user input, much less asking the user for that input. Therefore, most of the code in method addItem() belongs to another class.

Explicitly declare menu options

You are using magic numbers to identify your menu options. Wait, I just said menu option. This is a very important entity in your program, yet it doesn't appear explicitly anywhere, only implicitly in your println()s and ifs. Let's make an enum for it. This will also allow us to get rid of the magic numbers.

enum MenuOption {
    ADD_ITEM("Add an item to the list."),
    DISPLAY_ITEMS("Display list and total number of items."),
    EXIT("Exit.");

    private final String message;

    private MenuOption(String message){
        this.message = message;
    }

    public String getMessage(){
        return message;
    }
}




ShoppingList myList = new ShoppingList();
Scanner scanner = new Scanner(System.in);
MenuOption selectedOption = null;

while(selectedOption != MenuOption.EXIT){

    selectedOption = askUserOption(scanner);

    switch(selectedOption){
        case ADD_ITEM:                
            myList.addItem();
            break;
        case DISPLAY_ITEMS:
            myList.displayItem();
            break;
    }
}




private MenuOption askUserOption(Scanner scanner){
    System.out.println("");
    System.out.println("----- Shopping List------");
    for(int i=0; i&lt;MenuOption.values().length; i++){
        MenuOption option = MenuOption.values()[i];
        System.out.println("(" + i + ") " + option.getMessage());
    }

    int numericInput = scanner.nextInt();
    // TODO check for invalid inputs
    return MenuOption.values()[numericInput]; 
}


Wrap user prompting

Instead of writing System.out.println() at every point where you need to comunicate to your user, it might be a good idea to write a class for this purpose. For example:

class UserPrompter {
    public void prompt(String message){
        System.out.println(message);
    }
}


This has at least two benefits: 


It makes the intent of your code more clear. You are not just printing to stdout (maybe for debugging purposes) - you are actually sending a message to the user of your application.
It makes it easier to change the means of communication in the future. At one time you may want to display the messages on a web page instead of printing to stdout.


This last piece of advise, however, will add additional indirection that may not be needed. You may omit it if you feel that you'll be able to refactor your code at any time and just replace the println()s with something else.