Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 乘以2,然后每三年乘以3_Java - Fatal编程技术网

Java 乘以2,然后每三年乘以3

Java 乘以2,然后每三年乘以3,java,Java,我正在完成一项任务,任务要求: 神奇植物 我们有一种神奇的植物,它一旦被种植,就会发芽,在第一时间长出两片叶子 一年。它的叶子每年翻一番,只是每三年它的叶子翻两番 比如: Year: 1 | 2 | 3 | 4| 5| 6 | 7 … Leaves: 2 | 4 | 12| 24| 48|144|288 … 到目前为止,我已经完成了: int n = 0; int l = 6; for(int i = 2; i>-1; i++) { if(i == l) {

我正在完成一项任务,任务要求:

神奇植物

我们有一种神奇的植物,它一旦被种植,就会发芽,在第一时间长出两片叶子 一年。它的叶子每年翻一番,只是每三年它的叶子翻两番

比如:

Year:   1 | 2 | 3 |  4|  5| 6 |  7 …  
Leaves: 2 | 4 | 12| 24| 48|144|288 …
到目前为止,我已经完成了:

int n = 0;
int l = 6;

for(int i = 2; i>-1; i++) {
    if(i == l) {
        break;
    }
    if(i != l) {
        n = 2 * i;
    }
    if(i == l) {
        break;
    }
    if(i != l) {
        n = 3 * i;
    }
    System.out.println(n);
}
我的思考过程是检查它是否超过了第六年,然后在第三年乘以2,再乘以3,然后重复

这不起作用。输出为:

3
6
9
十五

我需要能够输入一年并找到一些假期, 此外,还可以测量叶子的数量,找出植物的年龄。

这个怎么样:

int years = 30; //number of years
long leaves = 0; //long is better because int will overflow faster

for(int i = 0 ; i < years ; ++i){
    if(i == 0)//first year
        leaves += 2;//adds 2 leaves
    else if(i % 3 == 0) //Every third year
        leaves *= 3; //triple leaves
    else//every other year
        leaves *= 2; //doubles leaves
    System.out.println(leaves);
}
测试代码

您可以使用(%),它对于此类任务非常方便

我建议对变量使用更好的名称,因为从长远来看,它可能是有害的;使用自解释的名称,如
numberOfLeaves
而不是
n
,以及
sixthYear
而不是
l

利用这些知识,您可以得到树的年数,因为这是一个赋值(对于collegue来说,我想…)我不会为此编写代码,但我会给您一个方法提示:在循环中减法,直到有零叶。

公共静态void main(String[]args)
   public static void main(String [] args)
    {
     String years = "";
     String leave = "";
        int num_years = 10;
        int leave_count = 1;
        for(int i=1;i<= num_years;i++) {
            leave_count = (i%3 == 0)? leave_count * 3:leave_count*2; 
            years = years + i +"|";
            leave = leave + leave_count + "|";
        }
    System.out.println(years+"\n"+leave);

}
{ 字符串年份=”; 字符串左=”; 整数年=10年; int leave_count=1;
对于(inti=1;i,这里有一种递归方法

private static int[] numberOfLeaves(int year) {
    if (year > 1) {
        if (year % 3 != 0) {
            int[] ret1 = new int[2];
            ret1[0] = ++numberOfLeaves(year - 1)[0];
            ret1[1] = numberOfLeaves(year - 1)[1] * 2;
            return ret1;
        } else {
            int[] ret2 = new int[2];
            ret2[0] = ++numberOfLeaves(year - 1)[0];
            ret2[1] = numberOfLeaves(year - 1)[1] * 3;
            return ret2;
        }
    }
    int[] ret = new int[2];
    ret[0] = year;
    ret[1] = year * 2;
    return ret;
}

它是经过测试的。当你打印出数据时,你应该通过索引访问它(ret[0]表示年数,ret[1]表示假期数)。

请阅读并编辑你的问题,以明确你到底在问什么。我们无法理解你的想法。
java!==javascript
1)不建议使用名为
l
的变量,因为它可能会与数字
1
混淆,具体取决于字体。--2)对于您的逻辑,不要尝试将
n
作为
i
的函数来计算。规则是
n
的值会在每次迭代中加倍/三倍,因此请将
n
作为
n
,即
n*=2
n*=3
--3)不要使用
break
退出循环。只需对
循环使用正常的
,即
for(int year=1;year
private static int[] numberOfLeaves(int year) {
    if (year > 1) {
        if (year % 3 != 0) {
            int[] ret1 = new int[2];
            ret1[0] = ++numberOfLeaves(year - 1)[0];
            ret1[1] = numberOfLeaves(year - 1)[1] * 2;
            return ret1;
        } else {
            int[] ret2 = new int[2];
            ret2[0] = ++numberOfLeaves(year - 1)[0];
            ret2[1] = numberOfLeaves(year - 1)[1] * 3;
            return ret2;
        }
    }
    int[] ret = new int[2];
    ret[0] = year;
    ret[1] = year * 2;
    return ret;
}