Java 重复循环,直到输入对分数类有效

Java 重复循环,直到输入对分数类有效,java,Java,我正在上一堂简单的分数测试课。我希望我的程序能做到这一点 如果用户输入0>循环将重复,直到用户输入一个不是0的数字 在我的课堂上,我不这么做。我尝试将它与do混用,而条件与if语句混用,加上初始化if语句true或false。我卡住了,所以我需要帮助 这是我的分数课: import java.util.*; public class FractionTest { public static void main(String args[]) { Scanner inpu

我正在上一堂简单的分数测试课。我希望我的程序能做到这一点

如果用户输入0>循环将重复,直到用户输入一个不是0的数字

在我的课堂上,我不这么做。我尝试将它与
do混用,而
条件与
if
语句混用,加上初始化if语句
true
false
。我卡住了,所以我需要帮助

这是我的分数课:

import java.util.*;


public class FractionTest {
    public static void main(String args[]) {
        Scanner input = new Scanner(System.in);

        boolean valid = true;
        int num, den;

        den = 0;

        do {
            System.out.println("Please enter the numerator: ");
            num = input.nextInt();
            System.out.println("Please enter the denominator: ");
            den = input.nextInt();
            if (den == 0 && valid) {
                System.out.println("denominator cannot be zero");
                System.out.println("Please enter the numerator: ");
                num = input.nextInt();
                System.out.println("Please enter the denominator: ");
                den = input.nextInt();
            }

        } while (den != 0 && !valid);
        System.out.println("Decimal is " + result(num, den));
    }

    public static double result(int x, int y) {
        return (x / y);

    }
}

这个问题并不完全清楚,但我想你们是在问,当分母变为零时,继续循环,否则计算答案并返回值。我根据这个对你的代码做了一些修改

public class FractionTest {
public static void main(String args[]) {
    Scanner input = new Scanner(System.in);

    boolean valid = true;
    int num, den;

    den = 0;

    while(den == 0) {
        System.out.println("Please enter the numerator: ");
        num = input.nextInt();
        System.out.println("Please enter the denominator: ");
        den = input.nextInt();
        if (den == 0 && valid) {
            System.out.println("denominator cannot be zero");
            System.out.println("Please enter the numerator: ");
            num = input.nextInt();
            System.out.println("Please enter the denominator: ");
            den = input.nextInt();
        }

    }
    System.out.println("Decimal is " + result(num, den));
    return;
}

public static double result(int x, int y) {
    return ((1.0)*x / y);

}

}将主方法中的代码更改为:

    Scanner input = new Scanner(System.in);
    int num, den;

    do {
        System.out.println("Please enter the numerator: ");
        num = input.nextInt();
        System.out.println("Please enter the denominator: ");
        den = input.nextInt();
        if (den!=0)
            System.out.println("Decimal is " + result(num, den));
        else
            System.out.println("Denominator shouldnt be 0");
    } while (den == 0);
    input.close();
  • 无需初始化“den”,因为该值已被替换
  • 不需要“布尔变量”,因为它的值永远不会改变
  • 如果den==0,则无需像循环应该的那样在循环内重新请求输入 无论如何,重新运行

  • 我只想分离您的输入验证:

            System.out.println("Please enter the numerator: ");
            num = input.nextInt();
        do{
            System.out.println("Please enter the denominator: ");
            System.out.println("denominator cannot be zero");
            den = input.nextInt();
        } while (den == 0);
        System.out.println("Decimal is " + result(num, den));
    

    如果你需要为你的分子做一个输入验证,那就做一段时间。此外,valid的布尔值始终为true。从不修改为错误。如果x为真,逻辑(x^True)将始终为真。

    请详细说明“它没有这样做”:它在做什么?指定输入和预期的行为/输出。是否确定
    result
    返回您认为的结果?看起来您不会更改循环中任意位置的valid值。此外,如果希望在用户输入0时重复循环,则看起来您应该使用den==0而不是den!=0在while条件中,因为它是
    int/int
    ,我们必须乘以
    1.0
    才能键入
    int
    。不错的一点@bradimusIt奏效了,我看到的所有其他邮件都建议执行布尔真语句,如果我希望循环不断重复,直到分母不是0。我只是好奇我的程序出了什么问题?