不确定在这种情况下使用什么循环

时间:2016-04-26 06:25:22

标签: java loops

我正在尝试创建一个简单的程序,询问用户的年龄,并在用户输入非整数值时显示错误。

以下是我到目前为止所做的事情:

import java.util.Scanner;

public class apples {

public static void main(String args[]) {

    Scanner nameinput = new Scanner(System.in);

    System.out.println("Please enter your name to begin.");

    System.out.println("Hello " + nameinput.nextLine() + "!");

    Scanner ageinput = new Scanner(System.in);

    System.out.println("Please enter your age");

    if(!ageinput.hasNextInt()){

        System.out.println("Please enter an integer");

    }

    System.out.println("You've entered a valid age");

    nameinput.close();
    ageinput.close();
}

}

这就是我想要的:

每次用户输入非整数时,我都希望出现Please enter an integer错误。然后用户应该能够再次输入他们的年龄,再次检查它是否是整数等等。这将持续到用户输入一个整数,然后才会显示消息You've entered a valid age。我确定在这种情况下(for,while,do while)既不使用哪个循环也不确定如何在代码中实现它。

4 个答案:

答案 0 :(得分:1)

String stringAge;
do {
    System.out.println("Please Enter an int");
    stringAge = ageinput.next();
} while (!stringAge.matches("^-?\\d+$")); //regex matches for - sign, and then a number
System.out.println("You entered an int");
int age = Integer.parseInt(stringAge);

答案 1 :(得分:0)

首先,不需要包含<?php defined('BASEPATH') OR exit('No direct script access allowed'); class verifyLogin_controller extends CI_Controller { function _construct(){ parent::_construct(); } public function index() { if($_POST["submitLogin"]) { $userEmail=$this->input->post('email'); $password=$this->input->post('password'); $verify_query = $this->db->from("admin"); $verify_query = $this->db->where(array("admin_userid" => $userEmail,"admin_password"=>$password)); $verify_query = $this->db->limit(1); $res=$this->db->get()->result(); if($res != null) { redirect("homeHeader_controller/index"); } else { redirect("adminLogin_controller/index"); } } } } 输入流的多个Scanner对象。 (How to use multiple Scanner objects on System.in?

至于实际代码,这是我想到的:

System.in

答案 2 :(得分:0)

正如您在Java中所知,他们有3种类型的循环:

The while and do-while Statements

  

do-whilewhile之间的区别在于do-while在循环底部而不是顶部评估其表达式。因此,do块中的语句总是至少执行一次

while只是一个预测试循环,即在进入循环体之前将检查 first 的条件:

while(condition)       # First check, if true or false
{ 
   # Body
}
然而,

do-while循环,在循环体执行至少一次后检查条件,它是一个后测试循环:

do{    
       # Body executed at least once
 }while(condition);

The for Statement

  

for语句提供了一种迭代一系列值的简洁方法。程序员经常将其称为&#34; for循环&#34;因为它反复循环直到满足特定条件的方式

请注意,在您的代码中,询问用户的年龄,正确的选择是do-while,因为您需要至少执行一次程序来提示消息并然后你必须检查条件,如果这是你打算做的,那么这就足够了你的目的。但是,您仍然可以使用while

这是您的代码编辑:

import java.util.Scanner;

public class apples {

public static void main(String args[]) {

    Scanner input = new Scanner(System.in);
    System.out.println("Please enter your name to begin.");
    System.out.println("Hello " + input.nextLine() + "!");

    System.out.println("Please enter your age");

    do{

         if(input.hasNextInt()){
                 System.out.println("You've entered a valid age");
                 break; 
              }

         else{
                System.out.println("Please enter an integer");
                input.next(); 
           }

    }while(true);

  }

}

由于循环的条件是布尔true,如果您使用while而不是do-while,那么 你想改变条件,这取决于你。现在,这段代码非常接近您发布的原始代码,并且从我的角度来看它可以工作,但它可能不是最好的代码,可能有其他方法对同一问题域更简单或更复杂。

答案 3 :(得分:-2)

希望这是你想要的。我建议使用while是要走的路(我的偏好)
使用while ::

public static void main(String args[]) {

    Scanner nameinput = new Scanner(System.in);

    System.out.println("Please enter your name to begin.");

    System.out.println("Hello " + nameinput.nextLine() + "!");

    Scanner ageinput = new Scanner(System.in);

    System.out.println("Please enter your age");

    while (!ageinput.hasNextInt()) {
        System.out.println("Please enter an integer");
        ageinput.next();
    }
    System.out.println("You've entered a valid age");
    nameinput.close();
    ageinput.close();
}

使用for ::

public static void main(String args[]) {

    Scanner nameinput = new Scanner(System.in);

    System.out.println("Please enter your name to begin.");

    System.out.println("Hello " + nameinput.nextLine() + "!");

    Scanner ageinput = new Scanner(System.in);

    System.out.println("Please enter your age");

    for (; !ageinput.hasNextInt();) {
        System.out.println("Please enter an integer");
        ageinput.next();
    }
    System.out.println("You've entered a valid age");
    nameinput.close();
    ageinput.close();
}

使用do while

public static void main(String args[]) {

    Scanner nameinput = new Scanner(System.in);

    System.out.println("Please enter your name to begin.");

    System.out.println("Hello " + nameinput.nextLine() + "!");

    Scanner ageinput = new Scanner(System.in);
    int i = 0;
    do {
        if (i == 0) {
            System.out.println("Please enter your age");
            i++;
        } else {
            System.out.println("Please enter an integer");
            ageinput.next();
        }
    } while (!ageinput.hasNextInt());
    System.out.println("You've entered a valid age");
    nameinput.close();
    ageinput.close();
}