黑马程序员技术交流社区
标题:
有一个问题需要解决
[打印本页]
作者:
湛添友
时间:
2014-4-20 01:06
标题:
有一个问题需要解决
//当直接敲回车时 会出现异常 怎么解决这个问题呢?
package com.itheima;
/**
* 编写程序接收键盘输入的5个数,装入一个数组,并找出其最大数和最小数
*
*
*思路: 接受键盘输入 用到输入流
* 然后把读取到的数据存入到 一个数组 既然 比较大小 这里以int型数组为例】
*、定义长度为5的数组 接收每次敲入的数组
当敲入了五个数字后 直接屏幕输出最大值和最小值
*
*/
import java.io.*;
public class Text7
{
public static void main(String args[])
{
getNum();
}
//创建字节流 接受键盘录入数据
public static void getNum()
{
int[] arr=new int[5];//定义一个数组来存储键盘录入
int pos=0,count=0;//定义 指针与计数器
//键盘录入标准
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
//BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
//InputStream is=System.in;
String s=null;
try
{
while((s=br.readLine())!=null)
{
if(s.equals("over"))
break;
if(!s.matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$"))//判断字符串是否为数字
throw new NumberFormatException("请输入数字");
arr[pos]=Integer.parseInt(s);
count++;
pos++;
if(count==5)//接受了五个数时直接打印最大值和最小值
{
int max=getMax(arr);
int min=getMin(arr);
System.out.println( "最大值::"+max+"最小值::"+min);
System.out.println("退出请输入:over");
pos=0;//清零
count=0;
}
}
}catch(IOException e){}
finally //关闭资源
{
if(br!=null)
try
{
br.close();
}catch(IOException e){}
}
}
//获取最大值于最小值
public static int getMax(int[] arr)
{
int max=arr[0];
for(int x=1;x<arr.length;x++)
{
if(max<arr[x])
max=arr[x];
}
return max;
}
//获取最小值
public static int getMin(int[] arr)
{
int max=0;
for(int x=1;x<arr.length;x++)
{
if(arr[max]>arr[x])
arr[max]=arr[x];
}
return arr[max];
}
}
作者:
曹冬明
时间:
2014-4-20 01:31
import java.io.*;
public class Text7
{
public static void main(String args[])
{
getNum();
}
//创建字节流 接受键盘录入数据
public static void getNum()
{
int[] arr=new int[5];//定义一个数组来存储键盘录入
int pos=0,count=0;//定义 指针与计数器
//键盘录入标准
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
//BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
//InputStream is=System.in;
String s=null;
try
{
while((s=br.readLine())!=null)
{
if(s.equals(""))//这里加上就好了
continue;
if(s.equals("over"))
break;
if(!s.matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$"))//判断字符串是否为数字
throw new NumberFormatException("请输入数字");
arr[pos]=Integer.parseInt(s);
count++;
pos++;
if(count==5)//接受了五个数时直接打印最大值和最小值
{
int max=getMax(arr);
int min=getMin(arr);
System.out.println( "最大值::"+max+"最小值::"+min);
System.out.println("退出请输入:over");
pos=0;//清零
count=0;
}
}
}catch(IOException e){}
finally //关闭资源
{
if(br!=null)
try
{
br.close();
}catch(IOException e){}
}
}
//获取最大值于最小值
public static int getMax(int[] arr)
{
int max=arr[0];
for(int x=1;x<arr.length;x++)
{
if(max<arr[x])
max=arr[x];
}
return max;
}
//获取最小值
public static int getMin(int[] arr)
{
int max=0;
for(int x=1;x<arr.length;x++)
{
if(arr[max]>arr[x])
arr[max]=arr[x];
}
return arr[max];
}
}
复制代码
我帮你改完了,主要是因为Integer.parseInt(str),里面接收的字符串只能是数字,整数负数都可以,但是,你直接回车输入的是空字符串,所以就会报NumberFormatException,所以你前面多加个判断条件就好了
作者:
湛添友
时间:
2014-4-20 08:31
嗯嗯,感谢
作者:
悠然丶
时间:
2014-4-20 09:15
我的代码没有楼主考虑的那么全面,,可以参考一下!!!
Scanner sc = new Scanner(System.in);//创建键盘录入功能
System.out.println("请输入5个数字"); //提示用户输入
int[] arr = new int[5]; //定义一个长度为5的数组,来存入用户输入的数字
for (int i = 0; i < 5; i++) {
String line = sc.nextLine(); //对用户输入的数字接收
arr[i] = Integer.parseInt(line);// 把接收到的字符串转成int数字 装进数组
}
Arrays.sort(arr); //对数组进行升序排序
int min = arr[0]; //最小值出现在0角标
int max = arr[arr.length - 1]; //最大值在最后的角标位置
System.out.println("min=" + min);
System.out.println("max=" + max);
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2