You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java类中一个方法调用同类另一个方法是否符合语法规则?

这种写法完全符合Java规则

你在pizzaCodes()方法中调用同一个类的pizzaSizes()方法的写法完全合规,Java本身就允许同一个类的实例方法(非static修饰的方法)之间直接互相调用。

你之前只接触过在main方法里调用方法,是因为main是静态方法,调用实例方法必须先创建类的对象;但pizzaCodes()和pizzaSizes()都是实例方法,它们属于同一个对象实例,所以可以直接调用,不需要额外创建对象,这就是代码能正常运行的原因。

你的代码展示

pizzaCodes()方法

public String pizzaCodes(){
    Scanner sc = new Scanner(System.in);
    
        System.out.println("Choose your pizza: ");
        code = sc.next().charAt(0);
        
    switch(code){
        
        case 'A', 'a':
            System.out.println("Pizza: " + pizzaCode[0]);
            System.out.println("Choose size(R/L): ");
            pizzaSizes(size); // pizzaSizes() method used in pizzaCodes() method.
            
            if(pizzaSize == 'R'){
                dPizza = "Chicken Delight: Regular";
                price2 = price[0];
            }else{
                dPizza = "Chicken Delight: Large";
                price2 = price[3];
            }
            System.out.println("Quantity?");
            quantity = sc.nextInt();
            break;
        case 'B', 'b':
            
            System.out.println("Pizza: " + pizzaCode[1]);
            System.out.println("Choose size(R/L): ");
            pizzaSizes(size); // pizzaSizes() method used in pizzaCodes() method.
            if(pizzaSize == 'R'){
                dPizza = "Beef Pepperoni: Regular";
                price2 = price[1];
            }else{
                dPizza = "Beef Pepperoni: Large";
                price2 = price[4];
            }
            System.out.println("Quantity?");
            quantity = sc.nextInt();
            break;
        case 'C', 'c':
            
            System.out.println("Pizza: " + pizzaCode[2]);
            System.out.println("Choose size(R/L): ");
            pizzaSizes(size); // pizzaSizes() method used in pizzaCodes() method.
            if(pizzaSize == 'R'){
                dPizza = "Cheese Bomb: Regular";
                price2 = price[2];
            }else{
                dPizza = "Cheese Bomb: Large";
                price2 = price[5];
            }
            System.out.println("Quantity?");
            quantity = sc.nextInt();
            break;
        case 'D', 'd':
            dPizza = "Super Deals";
            System.out.println("Pizza: " + pizzaCode[3]);
            System.out.println("Choose size(R/L): ");
            pizzaSizes(size); // pizzaSizes() method used in pizzaCodes() method.
            System.out.println("Quantity?");
            quantity = sc.nextInt();
            break;
    }
    
    total = price2 * quantity;
    totPrice = total + totPrice;
    
    if(totPrice > 50){ // if else for applying discount
        newPrice = totPrice - 20;
        System.out.println("Discount applied");
        System.out.println("Total amount :RM" + String.format("%.2f", newPrice));
    }else{
        newPrice = totPrice;
        System.out.println("No discount applied");
        System.out.println("Total amount :RM" + String.format("%.2f", newPrice));
    }

    return dPizza;
}

pizzaSizes()方法

public String[] pizzaSizes(String[] size){
    Scanner sc = new Scanner(System.in);
    
    pizzaSize = sc.next().charAt(0);
    
    if(pizzaSize == 'R'||pizzaSize == 'r'){
        System.out.println("Size: " + size[0]);
    }else{
        System.out.println("Size: " + size[1]);
    }
    
    return size;
}

额外的优化建议

虽然代码能运行,但有几个可以改进的地方:

  • 避免重复创建Scanner:两个方法都新建了Scanner,可以在类中声明一个全局的Scanner实例,复用它。
  • 减少全局变量依赖:目前pizzaSizes()是通过修改全局变量pizzaSize传递结果,更合理的做法是让方法直接返回选择的size字符(比如public char pizzaSizes(String[] size)),这样代码的可读性和可维护性更好。
  • 消除重复代码:每个switch case里的逻辑高度重复,可以把选择size、设置披萨名称和价格的逻辑提取成一个单独的方法,减少冗余。
  • 优化方法职责:pizzaSizes()现在返回传入的size数组,但这个返回值并没有被使用,可以调整方法的返回值为实际选择的size,或者根据需求修改方法的职责。

内容的提问来源于stack exchange,提问作者sakif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 12:15:27