如何优化?

Yancy_Xu 2016-04-12 05:39:11


上面的程序如何优化成,当在键盘中输入除数字以外的其他字符时,提示输入有误,然后能够再次重新输入?
...全文
194 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rickylin86 2016-04-26
  • 打赏
  • 举报
回复

import java.util.Scanner;

public class Test{
	public static void main(String[] args){
		System.out.println("请输入一行数字:");
		Scanner keyboard = new Scanner(System.in);
		String content = null;
		while(!((content = keyboard.nextLine()).matches("^\\d+$"))){
			System.out.println("输入有误,请重新输入一行数字:");
		}
		int result_even = content.length() - content.replaceAll("[02468]","").length();
		int result_odd = content.length() - result_even;
		System.out.printf("你输入的内容:'%s',其中奇数:%d个,偶数%d个%n",content,result_odd,result_even);
	}
}
  • 打赏
  • 举报
回复
30行改为num.isEmpty()

package com.shadowOfCode.demo1;

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Number {

	public static void main(String[] args) {
		
		
		Scanner in=null;
		String str="";
		System.out.print("请输入:");
		int oddNumberCount=0,evenNumberCount=0;
		StringBuffer oddStr=new StringBuffer(100);
		StringBuffer evenStr=new StringBuffer(100);
		String[] arr=null;
		while(true){
			in=new Scanner(System.in);
			str=in.nextLine();
			if(!isNumber(str)){
				System.out.println("您输入有误,请重输!\n");
				continue;
			}
			System.out.println("您输入的数:"+str);
			arr=str.split(" ");
			for(String num:arr){
				if(num.isEmpty()){
					continue;
				}
				boolean isOdd=isOddNumber(Integer.parseInt(num));
				if(isOdd){
					oddNumberCount++;
					oddStr.append(num+"\t");
				}else{
					evenNumberCount++;
					evenStr.append(num+"\t");
				}
			}
			//打印结果
			display(evenNumberCount, oddNumberCount, evenStr, oddStr);
			//归零
			evenNumberCount=0;
			oddNumberCount=0;
			evenStr.setLength(0);
			oddStr.setLength(0);
			
			System.out.println("是否继续?Y/N");
			if(in.nextLine().equalsIgnoreCase("n")){
				System.out.println("已结束!");
				return;
			}
			System.out.print("请输入:");
		}
		
	}
	
	/**
	 * 判断奇数(包括正负奇数)
	 * @param num
	 * @return
	 */
	public static boolean isOddNumber(int num){
		return (num&1)!=0;
	}
	
	public static void display(int evenNumberCount,int oddNumberCount,StringBuffer evenStr,StringBuffer oddStr){
		System.out.println("偶数个数为:"+evenNumberCount+"\t分别为:"+evenStr+"\n");
		System.out.println("奇数个数为:"+oddNumberCount+"\t分别为:"+oddStr+"\n");
	}
	
	public static boolean isNumber(String str){
		 String patternStr = "[\\d\\s ]+"; 
		 Matcher meq = Pattern.compile(patternStr).matcher(str);  
		 if(meq.matches()){   
			 return true; 
		}
		 return false;
	}

}

  • 打赏
  • 举报
回复

package com.shadowOfCode.demo1;

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Number {

	public static void main(String[] args) {
		
		
		Scanner in=null;
		String str="";
		System.out.print("请输入:");
		int oddNumberCount=0,evenNumberCount=0;
		StringBuffer oddStr=new StringBuffer(100);
		StringBuffer evenStr=new StringBuffer(100);
		String[] arr=null;
		while(true){
			in=new Scanner(System.in);
			str=in.nextLine();
			if(!isNumber(str)){
				System.out.println("您输入有误,请重输!\n");
				continue;
			}
			System.out.println("您输入的数:"+str);
			arr=str.split(" ");
			for(String num:arr){
				if(num==null){
					continue;
				}
				boolean isOdd=isOddNumber(Integer.parseInt(num));
				if(isOdd){
					oddNumberCount++;
					oddStr.append(num+"\t");
				}else{
					evenNumberCount++;
					evenStr.append(num+"\t");
				}
			}
			//打印结果
			display(evenNumberCount, oddNumberCount, evenStr, oddStr);
			//归零
			evenNumberCount=0;
			oddNumberCount=0;
			evenStr.setLength(0);
			oddStr.setLength(0);
			
			System.out.println("是否继续?Y/N");
			if(in.nextLine().equalsIgnoreCase("n")){
				System.out.println("已结束!");
				return;
			}
			System.out.print("请输入:");
		}
		
	}
	
	/**
	 * 判断奇数(包括正负奇数)
	 * @param num
	 * @return
	 */
	public static boolean isOddNumber(int num){
		return (num&1)!=0;
	}
	
	public static void display(int evenNumberCount,int oddNumberCount,StringBuffer evenStr,StringBuffer oddStr){
		System.out.println("偶数个数为:"+evenNumberCount+"\t分别为:"+evenStr+"\n");
		System.out.println("奇数个数为:"+oddNumberCount+"\t分别为:"+oddStr+"\n");
	}
	
	public static boolean isNumber(String str){
		 String patternStr = "[\\d\\s ]+"; 
		 Matcher meq = Pattern.compile(patternStr).matcher(str);  
		 if(meq.matches()){   
			 return true; 
		}
		 return false;
	}

}

赵4老师 2016-04-14
  • 打赏
  • 举报
回复
过早的优化是万恶之源!
li4c 2016-04-14
  • 打赏
  • 举报
回复
package http.hello;

import java.util.Arrays;
import java.util.Scanner;


public class Demo5 {

	public static void fuck(String str){
		int oddNum =0;
		int evenNum = 0;
		for(int i = 0 ; i < str.length() ; i++){
			char c = str.charAt(i);
			int n = (int)c - 48;
			if(n % 2 ==0){
				evenNum++;
				continue;
			}
			oddNum++;
		}
		System.out.printf("奇数的个数是:%d\n偶数的个数是:%d\n",oddNum,evenNum);
	}
	public static void main(String []args){
		Scanner input = new Scanner(System.in);
		input.useDelimiter("\n");
		while(input.hasNextLine()){
			String str = input.nextLine();
			fuck(str);
		}
	}
}
  • 打赏
  • 举报
回复
写个循环,数字正则表达式为条件,错误了循环,正确了跳出 数字表达式:^[0-9]*$

62,614

社区成员

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

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