Java 如何使用循环重复函数选择

Java 如何使用循环重复函数选择,java,Java,我是一个新的java学习者。 现在,我正在做一个需要4个功能的项目。(比如f1,f2,f3,f4) 在每个函数完成后,我可以选择下一步调用哪个函数。 实际上,我已经完成了4个函数,但我不知道如何实现函数选择(我尝试使用嵌套的while循环,但我搞砸了) 如果有人能给我一些想法,我将不胜感激。 多谢各位 import java.util.*; import java.io.*; public class driver { public static void main(String[] args)

我是一个新的java学习者。 现在,我正在做一个需要4个功能的项目。(比如f1,f2,f3,f4) 在每个函数完成后,我可以选择下一步调用哪个函数。 实际上,我已经完成了4个函数,但我不知道如何实现函数选择(我尝试使用嵌套的while循环,但我搞砸了) 如果有人能给我一些想法,我将不胜感激。 多谢各位

import java.util.*;
import java.io.*;
public class driver
{
public static void main(String[] args) 
{
    Scanner keyboard = new Scanner(System.in);
    System.out.println("chosewhat you want");
    int a = keyboard.nextInt();
    keyboard.nextLine();
    ObjectOutputStream objOut = null;
    ObjectInputStream objIn = null;
    Pet p = null;
    Person owner = null;

    while (a==1)
    {
    try 
    {
        objOut = new ObjectOutputStream(new FileOutputStream("pet.dat"));
        owner = new Person();
        p = new Mammal();
        owner.getInput();
        p.owner = owner;
        p.getInput();
        objOut.writeObject(p);
        objOut.close();

        a = keyboard.nextInt();
        keyboard.nextLine();
    } 

    catch (Exception e) 
    {
        System.out.println("here!!!");
    }
    }

    while ( a == 2)
    {
    try 
    {
        objIn = new ObjectInputStream(new FileInputStream("pet.dat"));

        try 
        {
            while(true)
            {
                p = (Pet)objIn.readObject();
                System.out.println(p);
            }

        } 
        catch (EOFException e) 
        {
            System.out.println("System ends");
        }
    } 

    catch (Exception e)
     {
        System.out.println("something in driver");
    }
    a = keyboard.nextInt();
    keyboard.nextLine();

    }
}
}
上面是我的代码,
如果我按1,则必须调用写入函数;如果我按2,则必须调用读取函数;如果我输入3,则必须调用函数3(我尚未添加)必须调用,但我不知道如何在每个函数完成后进行选项选择,如在函数2完成后,我可以选择执行函数1、函数2、函数3或退出系统。

如果您想拥有一组函数(方法)并选择以编程方式调用哪个函数,可以尝试以下操作:

首先使用执行函数所使用的方法创建一个接口。假设您的函数有一个
int
参数,并返回一个
字符串

public interface IFunction {
    public String execute(int parameter);
}
然后,您可以通过匿名内部类指定
IFunction
来定义具体函数:

IFunction f1 = new IFunction() {

    @Override
    public String execute(int parameter) {
        return "Always this text";
    }
};

IFunction f2 = new IFunction() {

    @Override
    public String execute(int parameter) {
        return Integer.toString(parameter);
    }
};

List<IFunction> flist = new ArrayList<>();
flist.add(f1);
flist.add(f2);

int choice = 1; //This can be filled using user input;

flist.get(choice).execute(3);
IFunction f1=新的IFunction(){
@凌驾
公共字符串执行(int参数){
返回“始终此文本”;
}
};
IFunction f2=新的IFunction(){
@凌驾
公共字符串执行(int参数){
返回整数.toString(参数);
}
};
List flist=new ArrayList();
flist.add(f1);
flist.add(f2);
int choice=1;//可以使用用户输入填写;
flist.get(选择)、execute(3);

通过使用数组,您可以直接传递用户输入以获取。

您可以使用
do while
循环和
开关的组合来根据用户输入做出决策

public class Test{

  public static void main(String args[]){
       Scanner sc = new Scanner(System.in);
       int choice;

       do{
         choice = sc.nextInt();
         switch(choice){

           case 1: function1();
                   break;
           case 2: function2();
                   break;
           case 3: function3();
                   break;
           case 4: function4();
                   break;

          }

        }while(choice!=0);
   }

public static void function1(){/*definition*/}
public static void function2(){/*definition*/}
public static void function3(){/*definition*/}
public static void function4(){/*definition*/}

}
使用“do while”进行重复,而条件匹配。“if else”进行功能选择

package com.loknath.lab;
import java.util.Scanner;
public class Demo3 {
        public static void main(String[] args) {
    int a = 0;
    Scanner keyboard = new Scanner(System.in);

    do {
        System.out.println("chosewhat you want");
        System.out.println("1 - F1");
        System.out.println("2 - F2");
        System.out.println("3 - F3");
        System.out.println("4 - F4");
        System.out.println("0 - exit");

        a = keyboard.nextInt();
        if (a == 1)
            f1();
        else if (a == 2)
            f2();
        else if (a == 3)
            f3();
        else if (a == 4)
            f4();
        else if ((a >= 5) || (a < 0))
            System.out.println("Invalid Choice: Please try again");
    } while (a != 0);
    System.out.println("Done");
}

public static void f1() {
    System.out.println("F1");
}

public static void f2() {
    System.out.println("F2");
}

public static void f3() {
    System.out.println("F3");
}

public static void f4() {
    System.out.println("F4");
}

 }
package com.loknath.lab;
导入java.util.Scanner;
公开课演示3{
公共静态void main(字符串[]args){
int a=0;
扫描仪键盘=新扫描仪(System.in);
做{
System.out.println(“chosewhat you want”);
System.out.println(“1-F1”);
系统输出打印项次(“2-F2”);
System.out.println(“3-F3”);
System.out.println(“4-F4”);
System.out.println(“0-退出”);
a=键盘.nextInt();
如果(a==1)
f1();
如果(a==2),则为else
f2();
如果(a==3),则为else
f3();
如果(a==4),则为else
f4();
如果((a>=5)| |(a<0))
System.out.println(“无效选择:请重试”);
}而(a!=0);
系统输出打印项次(“完成”);
}
公共静态无效f1(){
系统输出打印项次(“F1”);
}
公共静态无效f2(){
系统输出打印项次(“F2”);
}
公共静态无效f3(){
系统输出打印项次(“F3”);
}
公共静态无效f4(){
系统输出打印项次(“F4”);
}
}

共享您的代码,这样社区就可以帮助您,也可以说明您想要的结果/输出。因此,您希望用户在运行时输入以选择要执行的函数。您可以使用switch和whileyes的组合,我会尝试,谢谢!@xiao您可以按照下面的回答使用一个开关,然后调用f1.execute(参数)或f2.执行(参数)。我使用的数组是一种向您展示如何将函数作为对象来使用的方法。这样,当您添加新函数时,无需添加
if
switch
控制结构的新分支。明白了,实际上我还没有学习数组,我将在学习后尝试,非常感谢