输入一串数字以不同数量的空格分割数字,输出最小的数?我的代码如下,有一个问题求解?

king_wonder 2017-06-06 12:43:09
如果输入的不是纯数字,判断之后重新输入,然后再递归判断,可以输出最小的数,但是输出完后又开始以前面输出错的数据开始执行判断后面的代码抛出异常了,不懂求教?为什么明明我重新给字符串输入了应该是覆盖了前面的字符串值了,怎么还要回头再执行一次,在末尾加return也没用。
全部代码如下:

...全文
296 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
king_wonder 2017-06-08
  • 打赏
  • 举报
回复
引用 1 楼 u012934325 的回复:
package com.wonders;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class NumberArrayTest {

	public static void main(String[] args) {
		
		
		System.out.println("请输入输一串数字以不同数量的空格分割的字符串:");
		
		Scanner scanner  = new Scanner(System.in);
		
		String str = scanner.nextLine();
		
		int minNumber = printMinNumber(str);
		
		System.out.println("最小的数字是: " + minNumber);
	}

	private static int printMinNumber(String str) {
		
		//字符非空判断
		if (str != null && !"".equals(str) ) {
			//所有空格用,分隔或者其他符号(空格除外)
			str = str.replaceAll(" ", ",");
		}
		//转为字符串
		String[] ch = str.split(",");
		//list用于将所有非空格的元素装进去
		List<String> list = new ArrayList<String>();
		//用于将所有数字元素装进去
		List<Integer> numlist = new ArrayList<Integer>();
		for (int i = 0; i < ch.length; i++) {
			if (ch[i]!=null && !"".equals(ch[i])) {
				list.add(ch[i]);
			}
		}
		//判断list中是否全是数字
		String regex = "^\\d+$";
		for(int i=0;i<list.size() && list.size()>0;i++){
			String num = list.get(i);
			if (num.matches(regex)) {
				numlist.add(Integer.parseInt(list.get(i)));
			}
		}
		//对于numlist进行排序
		Collections.sort(numlist);
		return numlist.get(0);
	}
}
我这个应该和你的有区别,就算你字符串里面含有非数字字符,我都会将非数字字符去除掉
是的,你这个思路和我的思路是一样的,我做到将空格全部替换掉的时候后面就有问题没有加判断。你这个封装可以 的。
king_wonder 2017-06-08
  • 打赏
  • 举报
回复
引用 2 楼 galiniur0u 的回复:
楼主的程序用递归有点偏门了,说几点楼主程序中的错误(仅供参考哈): 1、递归有些退出是要有结束判断的,楼主显然没有,才会出现又运行了之前的输入参数,导致运行了脏数据。 2、楼主的判断是否有错误字符输入,如果楼主输入一万个数,但这些数是符合要求的,如果用Long.parser检查也会由于转换不了出错,但实际是没有错误的。所以校验有些问题。 3、分割,楼主是打算用正则分割,但数字是没有规律的,你去掉了空格就表示去掉了可分割的点,之后分割就会有问题。 4、由于结果只是找到最小的数,因此中间的数组除原始的分割后的String[],其他的均可以去掉,只保留一个结果就好。 顺便说一下,代码如果不涉及到保密,最好直接粘代码,而不要贴图片,方便别人帮助你。 可以参考如下代码:

public class ArrayMinValue {

	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		while(true){
			System.out.println("input str");
			String str = sc.nextLine();
			int min = calculate(str);
			if(min != Integer.MAX_VALUE){
				sc.close();
				System.out.println("min : " + min);
				break;
			}
			
		}
		
	}
	
	private static int calculate(String str){
		int length = str.length();
		String[] arr = str.split(" ");
		int min = Integer.MAX_VALUE;
		length = arr.length;
		int tmp;
		for(int i = 0; i < length; i ++){
			//过滤多余空格出现的空字符串
			if(arr[i].isEmpty()){
				continue;
			}
			try{
				//整数翻译失败
				tmp = Integer.parseInt(arr[i]);
			}catch(NumberFormatException e){
				return Integer.MAX_VALUE;
			}
			if(tmp < min){
				min = tmp;
			}
		}
		return min;
	}
}
受教了,钻进那个牛角尖了,还是经验太少需要多多练习,谢谢兄弟。
galiniur0u 2017-06-06
  • 打赏
  • 举报
回复
楼主的程序用递归有点偏门了,说几点楼主程序中的错误(仅供参考哈): 1、递归有些退出是要有结束判断的,楼主显然没有,才会出现又运行了之前的输入参数,导致运行了脏数据。 2、楼主的判断是否有错误字符输入,如果楼主输入一万个数,但这些数是符合要求的,如果用Long.parser检查也会由于转换不了出错,但实际是没有错误的。所以校验有些问题。 3、分割,楼主是打算用正则分割,但数字是没有规律的,你去掉了空格就表示去掉了可分割的点,之后分割就会有问题。 4、由于结果只是找到最小的数,因此中间的数组除原始的分割后的String[],其他的均可以去掉,只保留一个结果就好。 顺便说一下,代码如果不涉及到保密,最好直接粘代码,而不要贴图片,方便别人帮助你。 可以参考如下代码:

public class ArrayMinValue {

	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		while(true){
			System.out.println("input str");
			String str = sc.nextLine();
			int min = calculate(str);
			if(min != Integer.MAX_VALUE){
				sc.close();
				System.out.println("min : " + min);
				break;
			}
			
		}
		
	}
	
	private static int calculate(String str){
		int length = str.length();
		String[] arr = str.split(" ");
		int min = Integer.MAX_VALUE;
		length = arr.length;
		int tmp;
		for(int i = 0; i < length; i ++){
			//过滤多余空格出现的空字符串
			if(arr[i].isEmpty()){
				continue;
			}
			try{
				//整数翻译失败
				tmp = Integer.parseInt(arr[i]);
			}catch(NumberFormatException e){
				return Integer.MAX_VALUE;
			}
			if(tmp < min){
				min = tmp;
			}
		}
		return min;
	}
}
墨笙弘一 2017-06-06
  • 打赏
  • 举报
回复
package com.wonders;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class NumberArrayTest {

	public static void main(String[] args) {
		
		
		System.out.println("请输入输一串数字以不同数量的空格分割的字符串:");
		
		Scanner scanner  = new Scanner(System.in);
		
		String str = scanner.nextLine();
		
		int minNumber = printMinNumber(str);
		
		System.out.println("最小的数字是: " + minNumber);
	}

	private static int printMinNumber(String str) {
		
		//字符非空判断
		if (str != null && !"".equals(str) ) {
			//所有空格用,分隔或者其他符号(空格除外)
			str = str.replaceAll(" ", ",");
		}
		//转为字符串
		String[] ch = str.split(",");
		//list用于将所有非空格的元素装进去
		List<String> list = new ArrayList<String>();
		//用于将所有数字元素装进去
		List<Integer> numlist = new ArrayList<Integer>();
		for (int i = 0; i < ch.length; i++) {
			if (ch[i]!=null && !"".equals(ch[i])) {
				list.add(ch[i]);
			}
		}
		//判断list中是否全是数字
		String regex = "^\\d+$";
		for(int i=0;i<list.size() && list.size()>0;i++){
			String num = list.get(i);
			if (num.matches(regex)) {
				numlist.add(Integer.parseInt(list.get(i)));
			}
		}
		//对于numlist进行排序
		Collections.sort(numlist);
		return numlist.get(0);
	}
}
我这个应该和你的有区别,就算你字符串里面含有非数字字符,我都会将非数字字符去除掉

62,625

社区成员

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

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