怎样用一个boolean值判断两个用户输入,只能输入Int。否则提示错误,重新输入!还有更简单的写法吗?

fantilong 2016-08-25 02:14:30
import java.util.*;
public class Addition{
public static void main(String[] args){
AdditionMathod mathodOb = new AdditionMathod();//创建方法对象调用运算方法
Scanner sc = new Scanner(System.in);//Scanner对象调用扫描键盘输入
boolean flag1 = true,flag2 = true;//判断是否是Int类型数据
String[] number = new String[2];//储存输入数据
Integer[] answer = new Integer[2];//存储解析的Int数据
/*我要让用户只能输入Int数据,否则提示输入错误。重新输入。现在用了两个boolean值分别判断,
应该有其他更简单的写法吧?
*/
while (flag1) {
System.out.println("请输入您想运算的数字:");
number[0] = sc.next();//取得输入值
try {
answer[0] = Integer.parseInt(number[0]);//解析输入值并赋给answer
} catch (NumberFormatException e) {//抓取异常,不懂NumberFormatException e 是抓取的什么异常?
System.out.println("输入错误,请重新输入");//输出错误提示
sc.nextLine();//感觉多余,注释也能正确运行。
continue;//跳出cathch
}
if (answer[0] != null) {//判断是否有值
flag1 = false;//有值则跳出while,因为while条件是true。
} else {//这段代码感觉多余?注释也能正确运行。
sc.nextLine();//同上
}//同上
}
while(flag2){
System.out.println("请输入您想运算的次数:");
number[1] = sc.next();
try {
answer[1] = Integer.parseInt(number[1]);
} catch (NumberFormatException e) {
System.out.println("输入错误,请重新输入");
// sc.nextLine();
continue;
}
if (answer[1] != null) {
// System.out.println("测试结束");
flag2 = false;
} else {
sc.nextLine();
}
}
long c = mathodOb.additionMathod(answer[0],answer[1]);//调用方法运算,用long接受是因为方法运算的数值太大,赋给时可能会丢失数据。
System.out.print("结果是:" + c);//输出结果
}
}
...全文
565 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky_08_06_02 2016-08-27
  • 打赏
  • 举报
回复
fantilong 2016-08-26
  • 打赏
  • 举报
回复
@zengqingmei我初学!你里面用的好多东西我都看不懂!请问? 1、BufferedReader类是做什么用的?new BufferedReader(new InputStreamReader(System.in));//括号里面的看不懂? 2、temp = InputData.buf.readLine(); inputData类名怎么能调用方法呢?(.buf.readLine();是干嘛用的?) 3、catch(IOException e){             e.printStackTrace();}抓取异常真是还没学习到,不懂!e.printStackTrace干嘛用的? 4、.matches(“^\\d+$”);这个方法有什么用?里面这些字符是用来判断什么的吗? 5、后面两个方法为什么要放两个形参? ##写这个时我已经在查了?如果你愿意给我讲讲?
Freefish1994 2016-08-26
  • 打赏
  • 举报
回复
import java.util.Scanner;

public class A {
	public static void main(String[] args) {
		System.out.println("请输入运算的数字:");
		Scanner s1 = new Scanner(System.in), s2 = new Scanner(System.in);
		String l1 = null, l2 = null;
		boolean flag = true;
		while (flag) {
			if (s1.hasNextInt()) {
				l1 = s1.next();
				flag = false;
			} else {
				System.out.println("运算数字输入不合法请重新输入:");
				l1 = s1.next();
			}
		}
		System.out.println("请输入运算的次数:");
		flag = true;
		while (flag) {
			if (s2.hasNextInt()) {
				l2 = s2.next();
				flag = false;
			} else {
				System.out.println("运算次数输入不合法请重新输入:");
				l2 = s2.next();
			}
		}
		System.out.println("计算结果为:" + additionMethod(l1, l2));
	}
	private static long additionMethod(String data, String times) {
		int l1 = Integer.parseInt(data);
		int l2 = Integer.parseInt(times);
		long l = l1;
		for (int i = 0; i < l2; i++) {
			l += l1;
		}
		return l;
	}
}
wezzdo 2016-08-26
  • 打赏
  • 举报
回复
//尝试写了一下
public class CodeTest {
	Scanner sc=new Scanner(System.in);
	
	public void start(){
		System.out.println("请输入第一个整数,");
		String in=sc.next();
		System.out.println("请输入第二个整数");
		String put=sc.next();
		String str="^\\d+$";
		if(in.matches(str)&&put.matches(str)){
			System.out.println("输入正确");
		}else{
			System.out.println("输入错误,请重新输入");
			start();
		}
		}
public static void main(String[] args) {
CodeTest ct=new CodeTest();
ct.start();
}
}
逸花城 2016-08-25
  • 打赏
  • 举报
回复
写一个专门负责键盘输入的类
import java.io.*;
public class InputData
{
	private static BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
	public static String getString(String info){
		String temp = null;
		System.out.print(info);
		try{
			temp = InputData.buf.readLine();
		}catch(IOException e){
			e.printStackTrace();
		}
		return temp;
	}
	public static int getInt(String info,String err){
		int temp = 0;
		boolean flag = true;
		String str = null;
		while (flag)
		{
			str = InputData.getString(info);
			if (str.matches("^\\d+$"))
			{
				temp = Integer.parseInt(str);
				flag = false;
			}else{
				System.out.println(err);
			}
		}
		return temp;
	}
	public static float getFloat(String info,String err){
		float temp = 0.0f;
		boolean flag = true;
		String str = null;
		while (flag)
		{
			str = InputData.getString(info);
			if (str.matches("^\\d+\\.\\d+$")||str.matches("^\\d+$"))
			{
				temp = Float.parseFloat(str);
				flag = false;
			}else{
				System.out.println(err);
			}
		}
		return temp;
	}
};
以后直接这样: String str = InputData.getString("请输入字符串:"); int i = InputData.getInt("请输入整数:","输入的不是整数,请重新输入!"); float f = InputData.getFloat("请输入小数:","输入的不是小数,请重新输入!");
rickylin86 2016-08-25
  • 打赏
  • 举报
回复
String.trim() 是去除头尾的空格. 判断输入的一行是否满足 数字的格式.(数字前后可以包含空格.不包含其他非数字数据)
fantilong 2016-08-25
  • 打赏
  • 举报
回复
@soton_dolphin 你是意思是这种写法?怎么循环回去呢?在外面加个boolean判断?输入正确则结束,错误则一直循环?? if(input.hasNextInt()){ int num = input.nextInt(); System.out.println(num); }else{ System.out.println("请输入正确数字!~"); } @qq27762917 非常感谢!共同进步! @rickylin86 看不懂while里面的条件是什么意思?while(!(number = keyboard.nextLine()).matches("\\s*\\d+\\s*")) 还有这个?.trim()是什么意思?
rickylin86 2016-08-25
  • 打赏
  • 举报
回复

import java.util.Scanner;

public class Test{
	public static void main(String[] args){
		Scanner keyboard = new Scanner(System.in);
		System.out.print("请输入一个数字:");
		String number = null;
		while(!(number = keyboard.nextLine()).matches("\\s*\\d+\\s*")){
			System.out.printf("'%s' 不是合法的数字.\n",number);
			System.out.print("请重新输入一个数字:");
		}
		System.out.printf("你输入的数字是:'%s'",number.trim());
	}
}
Freefish1994 2016-08-25
  • 打赏
  • 举报
回复
引用 5 楼 soton_dolphin 的回复:
[quote=引用 4 楼 fantilong 的回复:] bogon:javaStudy fantilong$ java net 请输入您想运算的数字: d Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java:864) at java.util.Scanner.next(Scanner.java:1485) at java.util.Scanner.nextInt(Scanner.java:2117) at java.util.Scanner.nextInt(Scanner.java:2076) at net.main(net.java:7) 用nextInt输入的如果不是数字,就是异常!
你就不能查查api 还有一个方法叫hasNextInt() 吗??[/quote] 感觉我白写了= =
Freefish1994 2016-08-25
  • 打赏
  • 举报
回复
引用 3 楼 fantilong 的回复:
我知道可以用nextInt();但是我想做的是如果输入的不是数字,而是sdjfsn其他的什么的。我想给他返回错误并重输。还有输入的的数值能不能不要分别判断,同时判断该怎么写?
重新写了一个,用ASCII码判断的,也是够诡异的代码了。。。试了一下还可以,不知道行不行。。水平有限。。
import java.util.Scanner;

public class Addition {

	public static void main(String[] args) {
		System.out.println("请输入运算的数字:");
		String l1 = new Scanner(System.in).next();
		System.out.println("请输入运算的次数:");
		String l2 = new Scanner(System.in).next();
		boolean flag = true;
		while (flag) {
			for (int i = 0; i < l1.length(); i++) {
				if ((int) l1.charAt(i) < 48 || (int) l1.charAt(i) > 58) {
					System.out.println("运算的数字输入有误请重新输入:");
					l1 = new Scanner(System.in).next();
				} else
					flag = false;
			}
			for (int i = 0; i < l2.length(); i++) {
				if ((int) l2.charAt(i) < 48 || (int) l2.charAt(i) > 58) {
					System.out.println("运算的次数输入有误请重新输入:");
					l2 = new Scanner(System.in).next();
					flag = true;
				} else
					flag = false;
			}
		}
		System.out.println("计算结果:" + additionMathod(l1, l2));
	}

	private static long additionMathod(String data, String times) {
		int l1 = Integer.parseInt(data);
		int l2 = Integer.parseInt(times);
		long l = l1;
		for (int i = 0; i < l2; i++) {
			l += l1;
		}
		return l;
	}
}
soton_dolphin 2016-08-25
  • 打赏
  • 举报
回复
引用 4 楼 fantilong 的回复:
bogon:javaStudy fantilong$ java net 请输入您想运算的数字: d Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java:864) at java.util.Scanner.next(Scanner.java:1485) at java.util.Scanner.nextInt(Scanner.java:2117) at java.util.Scanner.nextInt(Scanner.java:2076) at net.main(net.java:7) 用nextInt输入的如果不是数字,就是异常!
你就不能查查api 还有一个方法叫hasNextInt() 吗??
fantilong 2016-08-25
  • 打赏
  • 举报
回复
bogon:javaStudy fantilong$ java net 请输入您想运算的数字: d Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java:864) at java.util.Scanner.next(Scanner.java:1485) at java.util.Scanner.nextInt(Scanner.java:2117) at java.util.Scanner.nextInt(Scanner.java:2076) at net.main(net.java:7) 用nextInt输入的如果不是数字,就是异常!
fantilong 2016-08-25
  • 打赏
  • 举报
回复
我知道可以用nextInt();但是我想做的是如果输入的不是数字,而是sdjfsn其他的什么的。我想给他返回错误并重输。还有输入的的数值能不能不要分别判断,同时判断该怎么写?
Freefish1994 2016-08-25
  • 打赏
  • 举报
回复
你用Scanner.next()方法本身就是输入的String类型的,用Scanner.nextInt()就是int类型数据了
import java.util.Scanner;

public class Addition {

	public static void main(String[] args) {
		System.out.println("请输入您想运算的数字:");
		int l1 = new Scanner(System.in).nextInt();
		System.out.println("请输入您想运算的次数:");
		int l2 = new Scanner(System.in).nextInt();
		System.out.println("计算结果:" + additionMathod(l1, l2));
	}

	private static long additionMathod(int data, int times) {
		long l = data;
		for (int i = 0; i < times; i++) {
			l += data;
		}
		return l;
	}
}
soton_dolphin 2016-08-25
  • 打赏
  • 举报
回复
用Scanner.nextInt()

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧