关于用方法返回对象遇到的问题

public class Solution {
    public static void main(String[] args) {
        getDeliciousDrink().taste();
        System.out.println(getWine().getCelebrationName());
        System.out.println(getSparklingWine().getCelebrationName());
        System.out.println(getWine().getCelebrationName());
    }

        /*
            补全代码
            4.编写 getDeliciousDrink、getWine 和 getSparklingWine 方法的实现。
            Solution 类必须实现 getDeliciousDrink() 方法,该方法返回 Wine 对象。
            Solution 类必须实现 getWine() 方法,该方法返回 Wine 对象。
            Solution 类必须实现 getSparklingWine() 方法,该方法返回 SparklingWine 对象。
            
        */   

}
给的题目部分内容要求是这样的,网上搜出来incrByTen()是返回对象的,但是没理解怎么用,比如返回值应该设定啥?

从题目需求分析,大概可以拆分以下几个部分:

  1. 定义Wine类,该类具有taste方法,和 getCelebrationName方方法。
  2. 定义SparklingWine类,该是Wine类的子类,继承与Wine,并重写getCelebrationName方法。
  3. getDeliciousDrink(),getWine() 方法返回Wine对象。
  4. getSparklingWine()方法返回SparklingWine对象。
  5. 另外可以去了解以下基础的Java相关的语法知识,如:类的结构和组成部分,方法的定义等内容。根据示例,大概可以这样写:
    public static Wine getWine()
    {
    Wine wine = new Wine();
    return wine;
    }

如果incrByTen()是返回对象的,那么你可以在实现中创建一个新的对象,对其进行操作并返回。
 
举个栗子:如果你有一个MyNumber对象,其中包含一个整数值value。
那么,你可以实现一个incrByTen() 方法,使其返回一个新的MyNumber对象,该对象的值为当前对象的值加上10,

  1. 创建一个新的对象,该对象的属性值等于当前对象的属性值加上 10。
  2. 返回新的对象。

代码如下:

public MyNumber incrByTen() {
    MyNumber result = new MyNumber(this.value + 10);
    return result;
}

首先创建一个名为result的新对象,它的值为当前对象的值加上 10。然后,我们返回这个新的对象。这样,调用incrByTen()方法将返回一个新的MyNumber对象,它的值是当前对象的值加上10。
 
如果答案对您有所帮助,望采纳。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7536130
  • 这篇博客也不错, 你可以看下算法题中求解绝对值最值的技巧
  • 除此之外, 这篇博客: 面试时遇见算法题该怎么办?中的 遇见算法题时的思路 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    首先理解题目,抓住给的重要条件

    1、已经排好序的数组

    题目给的已知条件就这一条,然后再来看一下我们要达到的目的

    1、返回新数组的长度
    2、新数组在这个长度里,同一个元素不能出现2次以上
    3、不允许使用额外的数组空间

    知道了现在有什么,知道了要达到什么目的,接下来要做的就是怎么才能到达目的地

    如果是使用JS,那么找到重复次数2次以上的数,当第三次出现的时候直接移除就OK了

    如果使用Go语言,因为无法直接对数组里的元素进行删除操作,那么我们就只能像上周那样,将整个数组重新整合,把后面的数据移动到前面来

    不管是将重复2次以上的数据删除,还是移动元素,我们现在面临的问题都是如何找到重复了2次以上的数字

    找到阻拦我们去目的地的障碍是什么之后,现在要做的就是解决路上的拦路石,怎么做呢?当然是从已知的条件里去找,看有没有什么能用上的。

    已知的信息就相当于我们出远门身上带的炸药包,路上遇到打劫的山贼,不拿出来使使,那些山贼们怎么会知道咱们的厉害呢?

    现在我们知道已知条件是「已排序好的数组」,既然已经排好序了,那么排好序有什么作用呢?现在是递增排序,那排好序后的数组特性就是,后面的数比前面的数要大,如果后面的数是重复的数字,就意味着后面的数等于前面的数

    所以,只要当后面的数等于前面的数时,我们就知道这个数重复了。你可能会说,那也只是知道重复了一次啊,怎么判断重复了2次呢?

    这就是一个思维定势了,谁告诉你只能找后面一个数的?我就不能找后面2个数了?也就是说,当我nums[0]==nums[2]时,不就代表nums[0]的值已经出现3次了?所以nums[2]以及它后面同样的数值,都是我们要抛弃的东西

    所以,在解决问题时,要充分的发挥已知条件的作用。

    好了,思路已经理的差不多了,接下来的思路就是要进行Code实现,Code实现,不同的语言就有着不同的实现方式,这次咱们还是老规矩,说两种语言

    咱们来看看代码实现,代码实现的思路讲解我放在了代码注释里

    /**
     * @param {number[]} nums
     * @return {number}
     */
    var removeDuplicates = function (nums) {
      let j = 0, i = 2;// 间隔1个元素
      for (; i < nums.length; i++) {
        // nums[i]与nums[j],中间间隔了一个nums[i-1]
        if (nums[j] === nums[i]) {
          // 当nums[j]==nums[i]时,代表这个数已经是第三次出现,所以要删除
          nums.splice(i, 1);
          // 删除一个元素后,用于遍历的游标i要-1
          // 意味着被删除的元素后面的内容要往前面移动一位,所以游标只要保持不动,就能找到下一位数
          i--;// i-- 只是为了抵消for 循环的 i++
        } else {
          j++;
        }
      }
      return i;
    };
    

    下图是JS代码提交的返回结果,拿来娱乐娱乐

    看来这次我的JS解法写的还不错,容我膨胀一下,看来我的这个思路比大多数人的方案都要优秀呀

    好了,老规矩,用你们熟悉的JS写了之后,咱们来复习复习Go语言的使用

    Go语言的实现我稍稍优化了一下下,虽然没点luan用

    func removeDuplicates(nums []int) int {
        // 因为最多元素可重复2次,所以前2个数不用管
    	if len(nums) < 3 {
    		return len(nums)
    	}
        // 定义2个游标 i,j
    	j, i := 2, 2// i 用于遍历数组,j 用于记录长度
    
    	for ; i < len(nums); i++ {
    		if nums[j-2] != nums[i] {
                // 因为不相等就意味着不重复
                // 直接将后面的值替换到前面来就好了
    			nums[j] = nums[i]
    			j++
    		}
    	}
    	return j
    }
    

    之所以再用Go语言来写一遍,是因为Go语言与JS的实现思路略有不同,所以这次我觉得还是写的有点价值的

    毕竟在语言没有直接删除数组元素的方法的情况下,这道题的难度又略微增加了一点

    有心的读者应该会发现,这次我没有使用range来迭代数组,就是不同的写法能让你们对Go语言能有个不同的印象

  • 您还可以看一下 孙玖祥老师的图解数据结构与算法课程中的 时间复杂度的计算小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^