java_依次输入10个不同的整数,一行输入一个整数。 若输入的整数与已经输入的整数相同,则抛出SameIntegerException异常,提示继续输入。
版本1(探索版)
package experiment6.exp3; import java.util.ArrayList; import java.util.List; import java.util.Scanner; /*依次输入10个不同的整数,一行输入一个整数。 若输入的整数与已经输入的整数相同,则抛出SameIntegerException异常,提示继续输入。 如:输入十个不同整数[10, 23, 39, 22, 48, 77, -2, 30, 8, 99] */ public class exp3 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入10个不同的整数,一个数一行:"); List<Integer> list = new ArrayList<>(); for (int i = 0; list.size()<10; i++) { String line = scanner.nextLine(); //line = scanner.nextLine(); int tmp = Integer.parseInt(line); if (list.contains(tmp)) { try { //list.add(tmp); throw new SameIntegerException(tmp,list); } catch (SameIntegerException e) { e.printStackTrace(); System.out.println("请重新输入:"); } }else { list.add(tmp); } }//endFor System.out.println("输入的10个不同整数为:\n"+list); }//endMain } /*测试数据: 10 23 39 10 22 48 39 77 -2 48 30 8 -2 99 */
package experiment6.exp3; import java.util.ArrayList; import java.util.List; public class SameIntegerException extends Exception{ int m; List<Integer> list=new ArrayList<>(); public SameIntegerException(int n,List<Integer> argList){ m=n; list=argList; } @Override public String getMessage() { return "输入的数"+m+"和已输入的数"+list+"有相同\n"; } }
改进版
package experiment6.exp3; import java.util.ArrayList; import java.util.List; import java.util.Scanner; /*依次输入10个不同的整数,一行输入一个整数。 若输入的整数与已经输入的整数相同,则抛出SameIntegerException异常,提示继续输入。 如:输入十个不同整数[10, 23, 39, 22, 48, 77, -2, 30, 8, 99] */ public class exp3 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入10个不同的整数,一个数一行:"); List<Integer> list = new ArrayList<>(); AddDifferentNum obj=new AddDifferentNum(); for (int i = 0; list.size() < 10; i++) { String line = scanner.nextLine(); int tmp = Integer.parseInt(line); try{ obj.add(list, tmp); }catch (SameIntegerException e){ e.printStackTrace();//区别于getStackTrace();方法. System.out.println("请重新输入:"); } }//endFor System.out.println("输入的10个不同整数为:\n"+list); }//endMain }
package experiment6.exp3; import java.util.List; public class SameIntegerException extends RuntimeException{ int m; List<Integer> list; public SameIntegerException(int n,List<Integer> argList){ m=n; list=argList; } @Override public String getMessage() { return "输入的数"+m+"和已输入的数"+list+"有相同";//+"\n" } }
package experiment6.exp3; import java.util.List; public class AddDifferentNum { public void add(List<Integer> list,int tmp) { if (list.contains(tmp)) { throw new SameIntegerException(tmp, list); } else { list.add(tmp); } } } /* 附上样例:(从Integer.parseInt()的源代码可以看出,throw抛出异常后,不是在本方法中立即catch. 而且,throw xxException 在方法没有用try套住(尽管一般都是RunningTimeException) 不过这样将try...catch在调用者中执行,在程序捕捉到第一个异常后就离开了(方法中还未执行的部分就来不及执行完整) 也就是说,看需求啦,到底要不要在方法中直接处理(套上try...catch). 当然,一般如果业务逻辑分的分配的清楚合理的话,是可以值抛出if(){throw}后,让main()方法去try catch. public static int parseInt(String s, int radix) throws NumberFormatException { * * WARNING: This method may be invoked early during VM initialization * before IntegerCache is initialized. Care must be taken to not use * the valueOf method. * if (s == null) { throw new NumberFormatException("null"); } if (radix < Character.MIN_RADIX) { throw new NumberFormatException("radix " + radix + " less than Character.MIN_RADIX"); } if (radix > Character.MAX_RADIX) { throw new NumberFormatException("radix " + radix + " greater than Character.MAX_RADIX"); } boolean negative = false; int i = 0, len = s.length(); int limit = -Integer.MAX_VALUE; if (len > 0) { char firstChar = s.charAt(0); if (firstChar < '0') { // Possible leading "+" or "-" if (firstChar == '-') { negative = true; limit = Integer.MIN_VALUE; } else if (firstChar != '+') { throw NumberFormatException.forInputString(s, radix); } if (len == 1) { // Cannot have lone "+" or "-" throw NumberFormatException.forInputString(s, radix); } i++; } int multmin = limit / radix; int result = 0; while (i < len) { // Accumulating negatively avoids surprises near MAX_VALUE int digit = Character.digit(s.charAt(i++), radix); if (digit < 0 || result < multmin) { throw NumberFormatException.forInputString(s, radix); } result *= radix; if (result < limit + digit) { throw NumberFormatException.forInputString(s, radix); } result -= digit; } return negative ? result : -result; } else { throw NumberFormatException.forInputString(s, radix); } } */
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了