【问题标题】:Java, combining classesJava,组合类
【发布时间】:2014-06-08 14:11:21
【问题描述】:

我遇到了一个问题,最近学习了 Java,现在我正在做一些作业,但似乎无法找出解决方案,我得到的输出如下,我不知道如何代替在那个随机菜单@somenumber 中,例如第一个是午餐,是的,我知道我仍然需要打印实际的菜单项

餐厅'真棒'

  • 菜单:Menu@2389b9bd
  • 菜单:Menu@27013985

餐厅“好的”

  • 菜单:Menu@41675ec4
  • 菜单:Menu@697eb767

“跛脚”餐厅

  • 菜单:Menu@7e3b014c
  • 菜单:Menu@53d26552

代码:

class RestaurantTest {

   public static Restaurant[] init()
   {
      MenuItem[] AwsomeLunch = { new MenuItem ("Chicken", 5.2 ), new MenuItem ("Sarma", 3.1) };
      MenuItem[] AwsomeDinner = { new MenuItem ("Steak", 10.2 ), new MenuItem ("Squid", 8.2) };   
      MenuItem[] OkayLunch = { new MenuItem ("Kebab", 6.1 ), new MenuItem ("Ćevapi", 3.7) };  
      MenuItem[] OkayDinner = { new MenuItem ("Sharksteak", 11.4 ), new MenuItem ("Pizza", 6.2) };
      MenuItem[] LameLunch = { new MenuItem ("Burek", 2.5 ), new MenuItem ("Wiener Schiniztel", 4.3) };
      MenuItem[] LameDinner = { new MenuItem ("Octopus", 11.4 ), new MenuItem ("Kalja", 0.1) };


      Menu[] MenuAwsome = { new Menu ("Lunch", AwsomeLunch), new Menu("Dinner", AwsomeDinner) };
      Menu[] MenuOkay = { new Menu ("Lunch", OkayLunch), new Menu("Dinner", OkayDinner) };
      Menu[] MenuLame = { new Menu ("Lunch", LameLunch), new Menu("Dinner", LameDinner) };

      Restaurant[] listOfRestaurants = { new Restaurant ("Awsome", "Vukovarska 111", MenuAwsome), new Restaurant ("Okay", "Stradun 222", MenuOkay), new Restaurant ("Lame", "Ilica 333", MenuLame)};
      return listOfRestaurants;

   }  
   public static void main (String[] arguments){

      Restaurant[] listOfRestaurants = init();

      Restaurant awsome = listOfRestaurants[0];
      Restaurant okay = listOfRestaurants[1];
      Restaurant lame = listOfRestaurants[2];

      System.out.println(awsome.getName());



      System.out.println("---------------------------------------");
      System.out.println();
      System.out.println("Running 'Restaurant Menu Search':");
      System.out.println();
      System.out.println("---------------------------------------");

      for (int i=0; i<3; i++) {
          System.out.println("Restaurant '" + listOfRestaurants[i].getName() + "'"); 

          for (int j=0; j<2; j++) {
            System.out.println("- Menu:" +  (listOfRestaurants[i].getMenu())[j]);
         }






      }





   } 
}

【问题讨论】:

  • 你在课堂上覆盖toString()吗?
  • 覆盖 toString() 方法 ot RestaurantMenuItem
  • Menu类的方法是什么?
  • 我仍然没有到达我打印出实际膳食及其价格的部分,即在 MenuItem 中
  • @user2627736 你应该在第二个循环中打印它,看例子below

标签: java class printing


【解决方案1】:

基本上你的问题出在这一行:

System.out.println("- Menu:" +  (listOfRestaurants[i].getMenu())[j]);

你得到的随机数是菜单类型对象的引用地址。此数字表示您正在打印对象 Menu 的 toString() ,如果未覆盖,则打印对象的引用。因此,要解决此问题,您可以为菜单调用 getName()(如果已定义),因此您的语句将如下所示:

System.out.println("- Menu:" +  (listOfRestaurants[i].getMenu())[j].getName());

或者定义一个 toString() 来打印菜单的名称,如下所示:

Stirng toString(){
    return this.name;
}

【讨论】:

    【解决方案2】:

    您应该打印来自Menu 类的一些属性,而不是像Menu:Menu@7e3b014c 这样的对象引用。例如

    Menu m = listOfRestaurants[i].getMenu()[j];
    System.out.println("Menu "+m.getName());
    MenuItem[] launch = m.getLaunch();
    for (MenuItem mi: launch)
      System.out.println("MenuItem "+mi.getName()+",  price "+mi.getPrice());  
    

    【讨论】:

      猜你喜欢
      • 2012-09-21
      • 1970-01-01
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      相关资源
      最近更新 更多