0

I make program like a marks journal. I am stuck in at users input. I want to make method which takes users input and puts it in HashMap. I guess there is a problem in my understanding methods works with each other.

        import java.io.*;
        import java.util.*;


        public class Main {
            HashMap marks;

            public void scanMark(){
                Scanner scan = new Scanner(System.in);
                System.out.println("Class Mark");

                String classname = scan.next();
                int mark = scan.nextInt();
                marks.put(classname, mark);
                scan.close();
            }
            public static void main(String[] args) {
                HashMap<String, Integer> markList = new HashMap<>();

                System.out.println("1.Add Mark\n2.Delete Mark\n3.Show Mark");
                Scanner sc = new Scanner(System.in);
                int x = sc.nextInt();
                sc.close();
                if(x == 1){
                    markList.scanMark();
                }
       }
       }
Valgaal
  • 896
  • 10
  • 25

3 Answers3

1

scanMark is a method of the class Main, so you just can not do this:

markList.scanMark(); 

because markList is a HashMap object and has no method scanMark

so you can create an instance of the Main class and on that object call the method scanMark

public static void main(String[] args) {
    Main mApp = new Main();
    HashMap<String, Integer> markList = new HashMap<>();

    System.out.println("1.Add Mark\n2.Delete Mark\n3.Show Mark");
    Scanner sc = new Scanner(System.in);
    int x = sc.nextInt();
    sc.close();
    if (x == 1) {
        mApp.scanMark();
    }
}
Graham
  • 7,431
  • 18
  • 59
  • 84
ΦXocę 웃 Пepeúpa ツ
  • 47,427
  • 17
  • 69
  • 97
1

You can't call the scanMark method on your HashMap since HashMap does not have that method. The scanMark method is located inside your Main class, so you need to call the scanMark method on an instance of Main. So your main will look like the following:

               public static void main(String[] args) {
                HashMap<String, Integer> markList = new HashMap<>();
  `            `Main main = new Main(); //create an instance of Main
                System.out.println("1.Add Mark\n2.Delete Mark\n3.Show Mark");
                Scanner sc = new Scanner(System.in);
                int x = sc.nextInt();
                sc.close();
                if(x == 1){
                    main.scanMark(); //call scanMark on Main object
                }
       }
BNeumann
  • 76
  • 4
0

I did several changes in your code. It is working now ;)

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * @author pakOverflow
 */
public class Main
{
    /** Constant - ADD MARK */
    private static final String ADD_MARK    = "Add Mark" ;

    /** Constant - DELETE MARK */
    private static final String DELETE_MARK = "Delete Mark" ;

    /** Constant - SHOW MARK */
    private static final String SHOW_MARK   = "Show Mark" ;

    /** Hash Map */
    private Map<String, Integer> marks ;

    private Main()
    {
        this.marks = new HashMap<String, Integer>() ;
    }

    public void scanMark()
    {
        Scanner scan = new Scanner(System.in) ;

        final int itemNumber = scan.nextInt() ;
        System.out.println("Item Number: " + itemNumber) ;

        String classname = null ;
        switch (itemNumber)
        {
            case 1:
                classname = ADD_MARK ;
                break ;             
            case 2:
                classname = DELETE_MARK ;
                break ;             
            case 3:
                classname = SHOW_MARK ;
                break ;
            default:
                classname = "Not found" ;
        }

        this.marks.put(classname, Integer.valueOf(itemNumber)) ;
        System.out.println(this.marks);

        scan.close() ;
    }

    public static void main(String[] args)
    {
        Main main = new Main() ;
        System.out.println("1." + ADD_MARK + "\n2." + DELETE_MARK + "\n3." + SHOW_MARK);        
        main.scanMark() ;
    }
}
pakkk
  • 289
  • 1
  • 2
  • 13