2013-02-12 113 views
1

我一直在与这个程序战斗一段时间了。它已经开始正确编译,但是当我按原样运行它时,它会无限地显示“您的账单是__”。当我改变初始响应值时,它拒绝运行。我对如何解决这个问题不知所措。无限循环或提前终止做while循环

/* Savannah Moore 
    CSCI 1301 
    2/11/2013 
    Internet Package Code: Code determines customer's final pricing. */ 
import java.util.Scanner; 

public class internet{ 
    public static void main(String[] args){ 
     double hours, price; 
     int internet; 
     String response, check="Yes"; 


     Scanner kb = new Scanner(System.in); /* This sections questions the user as to which package they have bought. */ 
     System.out.println("Our internet packages include:"); 
     System.out.println("Package 1: For $9.95 per month, 10 hours of access are provided. Additional hours are $2.00 per hour."); 
     System.out.println("Package 2: For $13.95 per month, 20 hours of access are provided. Additional hours are $1.00 per hour."); 
     System.out.println("Package 3: For $19.95 per month, unlimited access is provided."); 
     System.out.println("Please enter your package number:"); 
     internet=kb.nextInt(); 
     System.out.println("Please enter your total hours used:"); 
     hours=kb.nextDouble(); 
     response = "Yes"; 

while(check.compareToIgnoreCase(response)== 0) 
    { 
     switch (internet) 
     { 
     case 1: 
       { if (hours > 10) 
         price = (hours-10)*2 + 9.95; /* This adds the additional hours to the user's price at the current overage rate. */ 
        else  
         price = 9.95; 
       } 
       System.out.println("Your bill is $" +price); 
       break; 
     case 2: 
       { if (hours > 20) 
         price = (hours-20) + 13.95; 
        else  
         price = 13.95; 
       } 
       System.out.println("Your bill is $" +price); 
       break;   
    case 3:System.out.println("Your bill is $19.95"); 
       break; 
     default: System.out.println("This package choice is invalid."); 

     System.out.println("Would you like to compare your price with that of another package? Yes or No"); /* This gives the user the ability to stop the loop. */ 
     response=kb.nextLine(); 
     response=kb.nextLine(); 
    } 
    } 

    System.out.println("Thank you for using us as your internet service provider. Have a nice day!"); 
    } 
    } 

回答

5

循环变得无限,因为用户将响应更改为'否'的机会在case语句中。因此,当你的案件陈述中出现break;时,你立即跳回'while'检查,并且因为回复检查都是'是',它再次执行。

只要在案件陈述中的default:案件后面加上那些陈述,它应该可以工作。

换句话说,变革:

... 
    default: System.out.println("This package choice is invalid."); 

    System.out.println("Would you like to compare your price with that of another package? 
     Yes or No"); /* This gives the user the ability to stop the loop. */ 
    response=kb.nextLine(); 
    response=kb.nextLine(); 
    } 
} 

到:

 ... 
    default: System.out.println("This package choice is invalid."); 
    } 
    System.out.println("Would you like to compare your price with that of another package? 
     Yes or No"); /* This gives the user the ability to stop the loop. */ 
    response=kb.nextLine(); 
    response=kb.nextLine(); 
} 

我不知道你为什么这样做response=kb.nextLine();两次。

+0

我有响应= kb.nextLine();行两次,因为程序不会因为某种原因暂停用户输入。但是当我按照你所说的改变它时,它并没有在一开始就回到while语句。 – SMoore 2013-02-12 04:29:56

+0

没关系,我意识到我需要移动阅读用户输入。十分感谢你的帮助! – SMoore 2013-02-12 04:59:12

0

这应该做的伎俩

import java.lang.*; 
import java.util.Scanner; 

public class Program 
{ 
    /** 
    * This is the main entry point for the application 
    */ 
    public static void main(String[] args){ 
     double hours, price; 
     int internet; 
     String response, check="Yes"; 


     response = "Yes"; 

while(check.compareToIgnoreCase(response)== 0) 
    { 

     Scanner kb = new Scanner(System.in); /* This sections questions the user as to which package they have bought. */ 
     System.out.println("Our internet packages include:"); 
     System.out.println("Package 1: For $9.95 per month, 10 hours of access are provided. Additional hours are $2.00 per hour."); 
     System.out.println("Package 2: For $13.95 per month, 20 hours of access are provided. Additional hours are $1.00 per hour."); 
     System.out.println("Package 3: For $19.95 per month, unlimited access is provided."); 
     System.out.println("Please enter your package number:"); 
     internet=kb.nextInt(); 
     System.out.println("Please enter your total hours used:"); 
     hours=kb.nextDouble(); 
     switch (internet) 
     { 
     case 1: 
       { if (hours > 10) 
         price = (hours-10)*2 + 9.95; /* This adds the additional hours to the user's price at the current overage rate. */ 
        else  
         price = 9.95; 
       } 
       System.out.println("Your bill is $" +price); 
       break; 
     case 2: 
       { if (hours > 20) 
         price = (hours-20) + 13.95; 
        else  
         price = 13.95; 
       } 
       System.out.println("Your bill is $" +price); 
       break;   
    case 3:System.out.println("Your bill is $19.95"); 
       break; 
     default: System.out.println("This package choice is invalid."); 
     } 
     System.out.println("Would you like to compare your price with that of another package? Yes or No"); /* This gives the user the ability to stop the loop. */ 
     response=kb.nextLine(); 
     response=kb.nextLine(); 

    } 

    System.out.println("Thank you for using us as your internet service provider. Have a nice day!"); 
    } 
} 
+0

问题是,如果用户输入不是,我将需要响应为假。 – SMoore 2013-02-12 04:30:42

+0

我编辑了我的答案....如果问题得到解决,请将答案标记为已解决以备将来参考。 – wcraft 2013-02-12 05:06:36