2014-11-06 148 views
0

我有一个程序,用于处理在不同方法中使用不同的循环。除了调用另一个方法之外,整个程序运行良好。将一种方法调入另一种方法的麻烦

我遇到了调用另一个方法的问题。

我想要做的是:

  1. 有方法拨打对方并运行它从用户(1 - 100)采用可变 。
  2. 如果输入了无效输入 ,则增加一个变量。
  3. 当连续输入3个输入为 时,显示消息并退回到菜单。

被调用的方法在它自己的工作正常,它可以工作,当我打电话。

我无法工作的是3个无效输入后的显示消息。目前,它需要大约7个无效的输入,然后显示消息?

方法的工作原理:

public static boolean processGrade(int percentMark) 
{ 
    Menu m = new Menu(); 
    clrscr(); 
    System.out.println("Please enter your mark e.g. 90. (input -1 to exit): "); 
    percentMark = Genio.getInteger(); 
    if 
    (percentMark >=70 && percentMark <=100) 
    { 
     clrscr(); 
     System.out.println("Your Grade is A - Excellent!\n\n"); 
     pressKey(); 
     clrscr(); 
    } 
    else if(percentMark >= 60 && percentMark <70) 
    { 
     clrscr(); 
     System.out.println("Your Grade is B - Good!\n\n"); 
     pressKey(); 
     clrscr(); 
    } 
    else if (percentMark >=50 && percentMark <60) 
    { 
     clrscr(); 
     System.out.println("Your Grade is C - Ok!\n\n"); 
     pressKey(); 
     clrscr(); 
    } 
    else if(percentMark >=40 && percentMark <50) 
    { 
     clrscr(); 
     System.out.println(" Your Grade is D - Must Do Better!\n\n"); 
     pressKey(); 
     clrscr(); 
    } 
    else if (percentMark <40 && percentMark >= 0) 
    { 
     clrscr(); 
     System.out.println(" Your Grade is E - Must Do Better!\n\n"); 
     pressKey(); 
     clrscr(); 
    } 
    else if (percentMark < -1 || percentMark >100) 
    { 
     clrscr(); 
     System.out.println("ERROR: Value MUST be in the range of 0 - 100!"); 
     pressKey(); 
     clrscr(); 
     return false; 
    } 
    else if (percentMark == -1) 
    { 
     //clrscr(); 
     System.out.println("You entered -1, you will now return to the menu!"); 
     pressKey(); 
     return false; 
    } 
    return true; 
} 

的方法,我不能去工作,调用上述消息:

public static void processGradeV2(int percentMark) 
{ 
    int invalid = 0; 
    outerloop: 
    do { 
     clrscr(); 
     boolean result = processGrade(percentMark); 
     processGrade(percentMark);// Call processGrade method 

     if(result == false) 
     { 
      invalid++; 
     } 
     if(invalid == 3) 
     { 
      clrscr(); 
      System.out.println("Sorry, you have entered an invalid integer 3 times in a row! The program will return to the menu screen."); 
      pressKey(); 
      break outerloop; 
      //return; 
     } 
     if(percentMark == -1) 
     { 
      clrscr(); 
      System.out.println("You entered -1, you will now return to the menu!"); 
      pressKey(); 
      clrscr(); 
      break outerloop; 
      //processUserChoices(); 
     } 
    } 
    while(invalid <3); 
} 
+1

这是否甚至编译? 。对于初学者来说,processGrade(percentMark)有一个void返回类型而不是boolean,但你期望返回一个布尔值?布尔结果= processGrade(百分号) – 2014-11-06 15:42:33

+0

对不起,这是一个粘贴错误。我编辑了代码。整个代码会有帮助吗?我知道很多人讨厌任何人发布过多的代码。这是3班,不是太多。 – DarkBlueMullet 2014-11-06 15:44:11

+1

信息:这里不需要标签。尽量避免它们。为什么你叫'processGrade(percentMark)'两次?仍然是“粘贴错误”? – Tom 2014-11-06 15:46:11

回答

2
processGrade(percentMark);// Call processGrade method 

会在这里你造成的问题,删除它。

您已将processGrade(percentMark);结果赋值给result变量。

+1

在退出do/while循环之前,第二次调用会导致输入数量增加。 (就像一个addtitional信息) – Tom 2014-11-06 15:52:56

+0

就是这样......就这么简单。非常感谢你!我感到很愚蠢,因为没有意识到将类分配给变量实际上也是在调用它。学到了新的东西,再次感谢你! – DarkBlueMullet 2014-11-06 15:53:41

2

我会删除boolean result = processGrade(percentMark),而是改变你的if语句:

if(!processGrade(percentMark)){ 
    invalid++; 
}