Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/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 为什么这个do while循环不能正常工作?_Java_Loops_Do While - Fatal编程技术网

Java 为什么这个do while循环不能正常工作?

Java 为什么这个do while循环不能正常工作?,java,loops,do-while,Java,Loops,Do While,我在学校做了这个作业,我想通过加入一个do循环来进一步改进它,但它并没有按照预期的方式工作。我试图让它重复整个程序,直到输入正确为止,比如说,如果有人输入了字符串而不是整数,那么它会重复程序 我该怎么做 请不要提供更好的方法来编写本课程,因为这正是讲师想要的。我知道有更好的写作方法,因为我已经这样做了 public class Grade { public static void main(String[] args) { ConsoleReader console =

我在学校做了这个作业,我想通过加入一个do循环来进一步改进它,但它并没有按照预期的方式工作。我试图让它重复整个程序,直到输入正确为止,比如说,如果有人输入了字符串而不是整数,那么它会重复程序

我该怎么做

请不要提供更好的方法来编写本课程,因为这正是讲师想要的。我知道有更好的写作方法,因为我已经这样做了

public class Grade {
    public static void main(String[] args) {
        ConsoleReader console = new ConsoleReader(System.in);

        int i = 1;
        do {
            System.out.println("Enter your grade percentage:");
            int percent = (int) console.readDouble();
            Math.round(percent);
            percent = (int) percent / 10;
            String grade ="Input was not valid";

            if(percent <= 5){
                grade = "Your grade is an F, Work Harder so you won't have to retake!";
                System.out.println(grade);
                i = 9999999;
            }else{
                switch (percent){

                case 6:
                    grade = "Your grade is a D, work harder";
                    System.out.println(grade);
                    i = 9999999;
                    break;
                case 7:
                    grade = "Your grade is a C, That's average but you could do better.";
                    System.out.println(grade);
                    i = 9999999;
                    break;
                case 8:
                    grade = "Your grade is a B, That is pretty good but strive for that A";
                    System.out.println(grade);
                    i = 9999999;
                    break;
                case 9:
                    grade = "Your grade is a A, Good Work!!";
                    System.out.println(grade);
                    i = 9999999;
                    break;
                case 10:
                    grade = "Your grade is a A, Good Work!!";
                    System.out.println(grade);
                    i = 9999999;
                    break;
                default:
                    grade = "Your input was invalid, Please enter your grade percentage.";
                    System.out.println(grade);
                    i++;
                    break;
                }
            }
        }while(i != 9999999);
    }
}
公共课等级{
公共静态void main(字符串[]args){
ConsoleReader控制台=新的ConsoleReader(System.in);
int i=1;
做{
System.out.println(“输入你的分数百分比:”);
int percent=(int)console.readDouble();
数学四舍五入(百分比);
百分比=(整数)百分比/10;
String grade=“输入无效”;

如果(百分比我相信,这并没有达到你期望的效果:

int percent = (int) console.readDouble();
Math.round(percent);
percent = (int) percent / 10;
Math#round
函数返回一个舍入值,它不会舍入分配给
percent
的值。此外,由于不存在舍入的
int
,因此不会产生效果。您只能调用该方法,因为Java编译器应用了类型加宽。很可能这会弄乱您的数据。简单地将
double
转换为
int
并不是转换数据的好方法


此外,
console.readDouble()
将导致在用户输入无法解析为双精度的内容时引发异常。您应该尝试读取
try catch
块中的值,在该块中处理
catch
块中的无效输入。

有一个名为
异常处理
的主题,您应该研究它

举例说明

boolean done = false;
do {

 try{
  System.out.println("Enter your percentage");
  int percent = (int) console.readDouble();

  // more code
  // if the condition is satisfied then assign done = true;

 } catch(InputMismatchException e) {
    System.out.println("Please input only numbers");
 }
} while(!done);
如果用户输入的不是数字,则
readDouble
方法将抛出异常,在本例中为
inputmaschException

控件将转到
catch
块,警告消息将打印给用户,而不执行
readDouble
方法后面的任何其他代码


由于变量
done
布尔值仍然是false,while循环将再次执行。

整型除法警告!警告!传递值警告!这两件事您应该注意。如果用户输入不正确的数据,它将抛出异常,您无法准确捕获它y是预期的行为?顺便问一下,为什么要舍入一个整数?是的,如果您输入字符串而不是整数来调试它,它应该抛出异常。例如,通过System.out.println输出i值,或者设置一些断点。这对我来说非常有效,只是我花了一些时间才弄清楚它是数字格式异常而不是输入不匹配异常谢谢!因为我不知道这个
consolerereader
类是什么,所以我在示例中使用了
Console
类..很高兴我能帮上忙...)