2014-09-26 66 views
0

嗨,大家好我不太明白如何使用for循环,因为我们今天才开始学习它们。我必须为我们之前制作的程序添加一个for循环。它必须不断询问狗的年龄,直到用户输入负数。以下是我有:负数结束程序使用循环?

import java.util.Scanner; 

public class DogYears 
{ 
    public static void main(String [] args) 
    { 
     Scanner scan = new Scanner(System.in); 
     System.out.print("Enter your dog's age in human years: "); 
     int age = scan.nextInt(); 

     int dogAge = age * 7; 
     System.out.println("Your dog is " + age + " in human years and " 
      + dogAge + " in dog years!"); 

     if (dogAge >= 150) 
      System.out.println("Likely story"); 
     else if (dogAge >= 80 && dogAge < 150) 
      System.out.println("Hello grand-dog"); 
     else if (dogAge >= 40 && dogAge < 80) 
      System.out.println("Boring!"); 
     else if (dogAge >= 20 && dogAge < 40) 
      System.out.println("Get a job!"); 
     else if (dogAge < 20) 
      System.out.println("Just a pup!"); 
    } 
} 

回答

2

可以使用for循环这一点。

public static void main(String [] args) 
{ 
    Scanner scan = new Scanner(System.in); 
    int age = 1; 
    System.out.print("Enter your dog's age in human years: (or a negative number to exit)"); 
    for(;age>=0;){ 
     age = scan.nextInt(); 
     int dogAge = age * 7; 
     System.out.println("Your dog is "+age+" in human years and "+dogAge+" in dog years!"); 
     if(dogAge>=150)System.out.println("Likely story"); 
     else if (dogAge>=80 && dogAge<150) System.out.println("Hello grand-dog"); 
     else if(dogAge>=40 && dogAge<80)System.out.println("Boring!"); 
     else if(dogAge>=20 && dogAge<40)System.out.println("Get a job!"); 
     else if(dogAge<20)System.out.println("Just a pup!"); 
    } 
} 

但是,它不是最好的使用语法。在这种情况下,while循环会更容易理解。

这起作用的原因是因为for循环语法。

for循环需要3件:

  • 可变
  • 一个布尔值
  • 增量器

的用于环路初始化看起来像这样:

for(var;boolean;incrementer){ 
    //... 
} 

但是,你没有实际上需要一个增量或布尔值,甚至是一个变量。

for(;;){/*...*/}是完全有效的代码,并会循环,直到某些东西在break;之外。

因此,我们利用这一事实,仅在For循环初始化中使用布尔值。只要

for(;age>=0;){/*...*/} 

为变量age之前在for循环初始化:

你甚至可以把它写成。

+0

是的,但他希望我们熟悉for循环。 – user4068770 2014-09-26 05:11:00

+0

所以如果输入'0',意味着狗还没有出生。这不可能发生。而这对于循环语句是编译错误 – codebot 2014-09-26 05:17:33

+0

@codebot什么是你收到的编译错误?如果输入'0',这意味着没有输入负值,循环应该继续。我认为这是遵循指示。 – Enigmadan 2014-09-26 05:27:01

0

随着For循环:

for(;age>=0;){ 
      int dogAge = age * 7; 
      System.out.println("Your dog is "+age+" in human years and "+dogAge+" in dog years!"); 


     if(dogAge>=150)System.out.println("Likely story"); 
     else if (dogAge>=80 && dogAge<150) System.out.println("Hello grand-dog"); 
     else if(dogAge>=40 && dogAge<80)System.out.println("Boring!"); 
     else if(dogAge>=20 && dogAge<40)System.out.println("Get a job!"); 
     else if(dogAge<20)System.out.println("Just a pup!"); 
     System.out.print("Enter your dog's age in human years: "); 
     age = scan.nextInt(); 

    } 

因为你只需要终止条件为环路,则只能使用部分。

for(INITIALIZATION; CONDITION; INCREMENT/DECREMENT){ 
    // Code for the for loop's body 
    // goes here. 
} 

您DONOT必须初始化,你DONOT有递增或递减只是使用条件的一部分

+0

他告诉我们,我们必须使用“for”循环,并且我已经尝试了几乎所有我知道的东西,但仍然卡住 – user4068770 2014-09-26 04:55:30

+0

@ user4068770 with for循环 – Himanshu 2014-09-26 05:09:42

0

就这样做。我知道你已经知道这段代码里发生了什么,这里的for循环就像一个while循环。如果还有其他情况,请尝试使用括号。这是一个很好的代码练习。

class DogYears { 
    public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    System.out.print("Enter your dog's age in human years: "); 
    int age = scan.nextInt(); 

    for (; age > 0;) { 
     int dogAge = age * 7; 
     System.out.println("Your dog is " + age + " in human years and " + dogAge + " in dog years!"); 
     System.out.println("----------------------------"); 
     if (dogAge >= 150) { 
      System.out.println("Likely story"); 
     } else if (dogAge >= 80 && dogAge < 150) { 
      System.out.println("Hello grand-dog"); 
     } else if (dogAge >= 40 && dogAge < 80) { 
      System.out.println("Boring!"); 
     } else if (dogAge >= 20 && dogAge < 40) { 
      System.out.println("Get a job!"); 
     } else if (dogAge < 20) { 
      System.out.println("Just a pup!"); 
     } 
     System.out.println("----------------------------"); 
     System.out.print("Enter your dog's age in human years: "); 
     age = scan.nextInt(); 

    } 
    } 
} 

希望这会有所帮助!

+0

非常感谢您的帮助!但我改变了for循环,所以每个否定答案都会结束程序。再次感谢 – user4068770 2014-09-26 05:09:23

+0

我的荣幸。像for(; age> 0;)'那样改变你的for循环。那你就会好起来的。谢谢 – codebot 2014-09-26 05:14:12