Java 调用非静态方法时遇到问题

Java 调用非静态方法时遇到问题,java,Java,我目前正在做一个学校项目,我想我的程序能够调用一个非静态的方法,它仍然可以前后移动我当前的号码。我不知所措。我到底该怎么办?这是我迄今为止的编码,除了实现非静态选项之外,一切都正常 import java.util.Scanner; public class PictureViewer { final static int MAX_NUMBER = 8; final static int MIN_NUMBER = 1; public static v

我目前正在做一个学校项目,我想我的程序能够调用一个非静态的方法,它仍然可以前后移动我当前的号码。我不知所措。我到底该怎么办?这是我迄今为止的编码,除了实现非静态选项之外,一切都正常

   import java.util.Scanner;

    public class PictureViewer {

    final static int MAX_NUMBER = 8;
    final static int MIN_NUMBER = 1;


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

    public static void showMenu() {
        Scanner input = new Scanner(System.in);
        int current_number = MIN_NUMBER;
        boolean Continuation = true;
        while (Continuation) {

            System.out.println("Select One of the Options");
            System.out.println("Option 1: Forward");
            System.out.println("Option 2: Backward");
            System.out.println("Option 3: CreateFileName");
            System.out.println("Option 4: CreateRandomName");
            System.out.println("Option 5: Non-Static Forward");
            int Menu_Option = input.nextInt();
            switch (Menu_Option) {
                case 1:
                    current_number = forward(current_number);
                    System.out.println("The Current Number is: " +    current_number);
                    break;
                case 2:
                    current_number = backward(current_number);
                    System.out.println("The Current Number is: " + current_number);
                    break;
                case 3:
                    String fileName = createFileName(current_number);
                    System.out.println("File Name: " + fileName);
                    break;
                case 4:
                    fileName = createRandomName(current_number);
                    System.out.println("File Name: " + fileName);
                    break;


            }
        }
    }

    public static int forward(int current_number) {

        if (current_number >= MAX_NUMBER) {
            System.out.println(MIN_NUMBER);
            current_number = MIN_NUMBER;

        } else {
            System.out.println(current_number++);
        }
        return current_number;
    }

    public static int backward(int current_number) {

        if (current_number <= MIN_NUMBER) {
            System.out.println(current_number);
            current_number = MIN_NUMBER;
        } else current_number --; {
        }
        return current_number;
    }
    public static String createFileName(int current_number) {

        return "Picture" + current_number + ".gif";
    }

    public static String createRandomName(int current_number) {
        current_number = MIN_NUMBER + (int) (Math.random() * MAX_NUMBER);
        return "Picture" + current_number + ".gif";
    }

    public  void  forward () {
        // overloaded method, use global variable as input and output
    }

    public  void  backward () {
        // overloaded method, use global variable as input and output
    }

}
import java.util.Scanner;
公共类图片查看器{
最终静态整数最大值=8;
最终静态整数最小值=1;
公共静态void main(字符串[]args){
showMenu();
}
公共静态无效显示菜单(){
扫描仪输入=新扫描仪(System.in);
int当前_编号=最小_编号;
布尔延拓=真;
while(续){
System.out.println(“选择一个选项”);
System.out.println(“选项1:远期”);
System.out.println(“选项2:向后”);
System.out.println(“选项3:CreateFileName”);
System.out.println(“选项4:CreateRandomName”);
System.out.println(“选项5:非静态远期”);
int Menu_Option=input.nextInt();
开关(菜单选项){
案例1:
当前_编号=正向(当前_编号);
System.out.println(“当前编号为:“+当前编号”);
打破
案例2:
当前_编号=向后(当前_编号);
System.out.println(“当前编号为:“+当前编号”);
打破
案例3:
字符串文件名=createFileName(当前_编号);
System.out.println(“文件名:”+文件名);
打破
案例4:
文件名=createRandomName(当前编号);
System.out.println(“文件名:”+文件名);
打破
}
}
}
公共静态整数转发(整数当前_编号){
如果(当前数量>=最大数量){
系统输出打印项次(最小值);
当前_编号=最小_编号;
}否则{
System.out.println(当前_number++);
}
返回当前_编号;
}
公共静态int向后(int当前_编号){

如果(当前编号您不需要将所有方法定义为
static
,以便从
main
调用。您可以在
main
中创建一个对象并调用相同的方法。这是我要做的:

  • 使所有方法(除
    main
    )非静态(即删除
    static
    关键字)
  • 更改
    main
    方法实现以创建
    PictureViewer
    类的对象,并调用
    showMenu
    ,例如

    publicstaticvoidmain(字符串[]args){
    新建PictureViewer().showMenu();
    }


  • 要从
    main
    调用,您不需要将所有方法都定义为
    static
    。您可以在
    main
    中创建一个对象并调用相同的方法。这就是我要做的:

  • 使所有方法(除
    main
    )非静态(即删除
    static
    关键字)
  • 更改
    main
    方法实现以创建
    PictureViewer
    类的对象,并调用
    showMenu
    ,例如

    publicstaticvoidmain(字符串[]args){
    新建PictureViewer().showMenu();
    }


  • 好的,现在几乎是一切,请像愿意学习的人一样更好地阐述你的问题,不仅仅是“不起作用”,只是一个免费的建议;-)

    import java.util.Scanner;
    公共类图片查看器{
    最终静态整数最大值=8;
    最终静态整数最小值=1;
    私钥号码;
    公共静态void main(字符串[]args){
    showMenu();
    }
    公共静态无效显示菜单(){
    扫描仪输入=新扫描仪(System.in);
    int当前_编号=最小_编号;
    布尔延拓=真;
    while(续){
    System.out.println(“选择一个选项”);
    System.out.println(“选项1:远期”);
    System.out.println(“选项2:向后”);
    System.out.println(“选项3:CreateFileName”);
    System.out.println(“选项4:CreateRandomName”);
    System.out.println(“选项5:非静态远期”);
    int Menu_Option=input.nextInt();
    开关(菜单选项){
    案例1:
    当前_编号=正向(当前_编号);
    System.out.println(“当前编号为:“+当前编号”);
    打破
    案例2:
    当前_编号=向后(当前_编号);
    System.out.println(“当前编号为:“+当前编号”);
    打破
    案例3:
    字符串文件名=createFileName(当前_编号);
    System.out.println(“文件名:”+文件名);
    打破
    案例4:
    文件名=createRandomName(当前编号);
    System.out.println(“文件名:”+文件名);
    打破
    案例5:
    PictureViewer pv=新PictureViewer();
    pv.setCurrentNumber(当前_编号);
    pv.forward();
    current_number=pv.getCurrentNumber();
    System.out.println(“当前编号为:“+当前编号”);
    打破
    }
    }
    }
    公共静态整数转发(整数当前_编号){
    如果(当前数量>=最大数量){
    系统输出打印项次(最小值);
    当前_编号=最小_编号;
    }否则{
    System.out.println(当前_number++);
    }
    返回当前_编号;
    }
    公共静态int向后(int当前_编号){
    
    如果(当前的数字OK now几乎就是一切,请像愿意学习的人一样更好地阐述你的问题,不仅仅是“不起作用”,只是一个免费的建议;-)

    import java.util.Scanner;
    公共类图片
    
    import java.util.Scanner;
    
    public class PictureViewer {
    
    final static int MAX_NUMBER = 8;
    final static int MIN_NUMBER = 1;
    
    private int currentNumber;
    
    public static void main(String[] args) {
        showMenu();
    }
    
    public static void showMenu() {
        Scanner input = new Scanner(System.in);
        int current_number = MIN_NUMBER;
        boolean Continuation = true;
        while (Continuation) {
    
            System.out.println("Select One of the Options");
            System.out.println("Option 1: Forward");
            System.out.println("Option 2: Backward");
            System.out.println("Option 3: CreateFileName");
            System.out.println("Option 4: CreateRandomName");
            System.out.println("Option 5: Non-Static Forward");
            int Menu_Option = input.nextInt();
            switch (Menu_Option) {
            case 1:
                current_number = forward(current_number);
                System.out.println("The Current Number is: " + current_number);
                break;
            case 2:
                current_number = backward(current_number);
                System.out.println("The Current Number is: " + current_number);
                break;
            case 3:
                String fileName = createFileName(current_number);
                System.out.println("File Name: " + fileName);
                break;
            case 4:
                fileName = createRandomName(current_number);
                System.out.println("File Name: " + fileName);
                break;
            case 5: 
                PictureViewer pv = new PictureViewer();
                pv.setCurrentNumber(current_number);
                pv.forward();
                current_number = pv.getCurrentNumber();
                System.out.println("The Current Number is: " + current_number);
                break;
            }
        }
    }
    
    public static int forward(int current_number) {
    
        if (current_number >= MAX_NUMBER) {
            System.out.println(MIN_NUMBER);
            current_number = MIN_NUMBER;
    
        } else {
            System.out.println(current_number++);
        }
        return current_number;
    }
    
    public static int backward(int current_number) {
    
        if (current_number <= MIN_NUMBER) {
            System.out.println(current_number);
            current_number = MIN_NUMBER;
        } else
            current_number--;
        {
        }
        return current_number;
    }
    
    public static String createFileName(int current_number) {
    
        return "Picture" + current_number + ".gif";
    }
    
    public static String createRandomName(int current_number) {
        current_number = MIN_NUMBER + (int) (Math.random() * MAX_NUMBER);
        return "Picture" + current_number + ".gif";
    }
    
    public void forward() {
        // overloaded method, use global variable as input and output
        this.currentNumber = this.currentNumber +1;
    }
    
    public void backward() {
        // overloaded method, use global variable as input and output
    }
    
    public int getCurrentNumber() {
        return currentNumber;
    }
    
    public void setCurrentNumber(int currentNumber) {
        this.currentNumber = currentNumber;
    }
    
    showOptions()
    
    new PictureViewer().showOptions();