做循环试try catch

问题描述:

我的代码有什么问题?我正在尝试请求提示用户输入一个数字,如果它不在1和6之间,或者它应该表示无效的数字并提示另一次尝试。用户可能只有3次尝试。做循环试try catch

import java.util.Scanner; 

public class Game { 

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    int[] numbers = new int[6]; 

    System.out.println("Enter a number on a die from 1-6:"); 
    String dieinput = input.next(); 
    int invalidcount = 0; 
    System.out.println("Your number is: " + dieinput); 



    do{ 
    try 
    { 
     // the String to int conversion 
     int dienum = Integer.parseInt(dieinput.trim()); 
     int dienumOE = 0; 
     int count=0; 

     //test number input 
     if ((dienum >= 1) && (dienum<= 6)) 
      System.out.println("number is " + dienum + oddoreven(dienum)); 
     else 
      System.out.println("Invalid number, please enter a number 1-6"); 
      count++; 
      System.out.println("Count" + count); 
     } 
    catch (NumberFormatException nfe){ 
     System.out.println("Invalid number, please enter a number 1-6"); 
     System.out.println("Count" + count); 
     } 
    while (count <= 3 && count >=0); 
    } 
    } 





// Check if odd or even 
public static String oddoreven(int num) { 
    String result; 

    if (num % 2 == 0) 
     result = "even"; 
    else 
     result = "odd"; 
    return result; 
} 
} 
+1

无限循环。您在每个循环的开始时将计数设置为0。请参阅下面的答案,但不要在循环内将此变量设置为零。 –

+0

请发表一个完整的例子 - 你的源代码甚至不会编译。 – GhostCat

+0

我改变了int计数器,但do-while仍在正常工作。建议? –

你的问题是“错误”的范围界定:不能使用是范围内声明的捕捉块内的变量尽量块!

换句话说;您需要:

int counter = 0; 
try { ... 
} catch (... 

,如果你想内计数器同时使用尝试和

“规则”很简单:一个变量是唯一可见到那个}封闭的“块”,它是在

阻止你真正编译代码!

所以,真正教训这里更像是:不写了100行代码然后编译运行。只写尽可能少的行 - 每次当你认为:这是“足够”编译..然后编译。然后修复报告给您的错误。 java编译器非常擅长给你提供特定的消息,告诉你你做错了什么;但更多凌乱的代码,你得到更难!

并记录:SO不是一个“远程”编译器服务,您应该使用它来让您的杂乱代码编译!

+0

*对于记录:SO不是一个“远程”编译器服务,您应该使用它来让您的杂乱代码编译!*这很有趣,因为您这样做了。这些问题有重复,不需要再回答。 – Tunaki