Java 无限while循环;输入验证;don';I don’我不知道该怎么做才能让它在输入前被读取我该怎么做?

Java 无限while循环;输入验证;don';I don’我不知道该怎么做才能让它在输入前被读取我该怎么做?,java,Java,我对编程很陌生,所以很抱歉解释不好和/或编写的代码不好 无论如何,我目前正在使用“方法重载”处理作业,我希望能够从用户那里获得双精度或整数 我的第一个代码有效,因此我决定在最后一个if语句的末尾添加一个else,该语句检查输入是否错误,并重复整个代码。问题是,当您第一次输入数字时,代码工作正常,但如果输入错误,它将启动while循环,并继续重新迭代代码块,而不考虑任何输入。我知道它只是忽略了if语句,因为它们之前没有任何类型的输入(或任何阻止它的东西?)。我需要一些方法的代码检查得到的输入,然后

我对编程很陌生,所以很抱歉解释不好和/或编写的代码不好

无论如何,我目前正在使用“
方法重载
”处理作业,我希望能够从用户那里获得
双精度
整数

我的第一个代码有效,因此我决定在最后一个
if
语句的末尾添加一个
else
,该语句检查输入是否错误,并重复整个代码。问题是,当您第一次输入数字时,代码工作正常,但如果输入错误,它将启动
while
循环,并继续重新迭代代码块,而不考虑任何输入。我知道它只是忽略了
if
语句,因为它们之前没有任何类型的输入(或任何阻止它的东西?)。我需要一些方法的代码检查得到的输入,然后检查它是否是一个整数或双精度之前宣布的变量类型…或者如果有一些更好的方法,请分享。。。如果你需要更多的知识,请回复这篇文章或其他什么…在这里 还有,它还没有完成,如果你愿意,可以称之为草稿

public class LoanRates {
    public static void main(String[] args){

        Scanner in = new Scanner(System.in);
        boolean x = false;
        while(x = true){
            System.out.println("please enter a number");
            x = false;
            if (in.hasNextInt()){
                int rate = 0;           
                rate = getNumbers(rate, in);
                System.out.println(rate);
                break;
            } else if( in.hasNextDouble()){
                double rate = 0;
                System.out.println("please enter a number");
                rate = getNumbers(rate, in);
                System.out.println(rate);
                break;
            }else {                 
            System.out.print("please enter a number");}         
        }   
        System.out.print("did it work?");
    }

    public static double getNumbers(double rate, Scanner in){
        rate =in.nextDouble();
        return rate;
    }

    public static int getNumbers(int rate, Scanner in){
        rate = in.nextInt();
        return rate;
    }
}
您正在使用
而(x=true)
则始终为true

首先必须将x变量初始化为true。否则它将不会进入while循环 布尔x=真

尝试
while(x==true)
并确保在必要时将
变量x的值更改为
false
像这样试试但是最好传递double或int值,而不是将scanner引用传递给
getNumbers
方法

package test;

import java.util.Scanner;
import javax.swing.JOptionPane; 

public class LoanRates {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (true) {
            System.out.println("Please enter a number");
            String input = in.next();
            try {
                int rate = Integer.parseInt(input);
                // you can use the rate variable and change your method to accept the input value
                System.out.println(getNumbers(rate));
                break;
            } catch (NumberFormatException e) {
                try {
                    double rate = Double.parseDouble(input);
                    // you can use the rate variable and change your method to accept the input value
                    System.out.println(getNumbers(rate));
                    break;
                } catch (NumberFormatException ex) {
                    System.out.println("Invalid number.");
                }
            }
        }
        System.out.print("did it work?");
    }

    public static double getNumbers(double rate) {
        // rate calculation logic
        return rate;
    }

    public static int getNumbers(int rate) {
        // rate calculation logic
        return rate;
    }
}

我这样做了,它不停地重复,没有给我输入的机会……下面是一个例子:请输入一个数字请输入一个数字请输入一个数字请输入一个数字请输入一个数字请输入一个数字请输入一个数字请输入一个数字请输入一个数字请输入一个数字请输入一个数字请输入一个数字请输入一个数字请输入一个数字请输入一个数字输入数字请输入数字请输入数字请输入数字请输入数字请输入数字请输入数字请输入数字请输入数字请输入数字请输入数字问题是它仅在(if(in.hasNext[int/double])之后获得输入,而while循环正好滑过该。。。它不断重复…你可以测试代码,输入一个字符串,你会看到它不断重复同样的事情…是的。那么您想做什么呢?如果最好使用实际变量,那么在调用重载函数时如何获得正确的数据类型?当用户输入字符串时,您想做什么?