简单的Java程序
简单的Java程序非常适合评估程序员的编码技能。
您几乎可以在任何面试中找到与编码相关的问题。
这些编程问题的想法是研究候选人的思考过程。
在大多数情况下,最初的解决方案效率不高,这就需要进一步的问题,并查看受访者是否可以进一步改进它。
简单的Java程序
我在这里提供10个简单的Java程序。
它们非常适合编码实践,可以在访谈中使用。
在查看答案之前,请尝试自己编写解决方案,这将使您更有信心,并且可以检查您的解决方案是否良好。
请注意,可以进一步改善解决方案,因此,如果您有更好的方法,请通过注释告知我们。
反转字符串
package com.theitroad.javaprograms; public class JavaReverseString { public static void main(String[] args) { System.out.println(reverseString("abc")); System.out.println(reverseString("123!@#098*")); } public static String reverseString(String in) { if (in == null) return null; StringBuilder out = new StringBuilder(); int length = in.length(); for (int i = length - 1; i >= 0; i--) { out.append(in.charAt(i)); } return out.toString(); } }
空检查以避免NullPointerException。
使用
StringBuilder
代替StringBuffer
以获得更好的性能。创建用于输入字符串长度的局部变量,而不是将其置于if条件中。
函数调用次数越少,性能越好。可以通过接受用户输入而不是静态测试数据来进行改进
斐波那契系列
package com.theitroad.javaprograms; public class FibonacciSeries { public static void main(String[] args) { printFibonacciSeries(10); } public static void printFibonacciSeries(int count) { int a = 0; int b = 1; int c = 1; for (int i = 1; i <= count; i++) { System.out.print(a + ", "); a = b; b = c; c = a + b; } } }
通过接受用户输入要打印的整数数可以改进程序。
注意使用" System.out.print"功能可以单行打印数字,这很不错。
斐波那契数从0或者1开始,上述程序可以扩展为以用户输入为起点。
编写精美的简单程序,很高兴看到没有使用递归或者复杂的编码。
素数检查
package com.theitroad.javaprograms; import java.util.Scanner; public class CheckPrimeNumber { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print("Enter number to check for prime:"); int n = s.nextInt(); s.close(); checkPrime(n); } private static void checkPrime(int n) { if (n == 0 || n == 1) { System.out.println(n + " is not a prime number"); return; } if (n == 2) { System.out.println(n + " is a prime number"); } for (int i = 2; i <= n/2; i++) { if (n % i == 0) { System.out.println(n + " is not a prime number"); return; } } System.out.println(n + " is a prime number"); } }
很高兴看到使用Scanner类接受用户输入。
请注意,如果检查规则的数字不同,即0,1和2,则很少进行检查。
0和1不是质数,而2是唯一的偶质数。除法检查仅进行到`i
在负整数的情况下,该方法将失败-或者让用户知道在主方法中输入正整数,或者使整数为正,然后对其进行处理。
检查回文字符串
package com.theitroad.javaprograms; import java.util.Scanner; public class PalindromeString { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("Enter String to check for Palindrome:"); String str = s.next(); s.close(); checkPalindrome(str); } private static void checkPalindrome(String str) { char[] charArray = str.toCharArray(); StringBuilder sb = new StringBuilder(); for (int i = charArray.length - 1; i >= 0; i--) { sb.append(charArray[i]); } if (sb.toString().equalsIgnoreCase(str)) System.out.println(str + " is palindrome."); else System.out.println(str + " is not palindrome"); } }
使用StringBuilder以相反的顺序创建新字符串,然后检查其值是否与原始字符串相同。
通过比较两端的字符可以改善实现。
如果String的长度为5,则在0th == 4th和1st == 3rd时为回文。
无需创建单独的字符串。
尝试为此编写代码,然后在注释部分中发布。
以编程方式对数组进行排序
package com.theitroad.javaprograms; import java.util.Arrays; public class JavaArraySort { public static void main(String[] args) { int[] array = {2,1,5,3,4,6,7}; int[] sortedArray = bubbleSortAscending(array); System.out.println(Arrays.toString(sortedArray)); } public static int[] bubbleSortAscending(int[] arr){ int temp; for(int i=0; i < arr.length-1; i++){ for(int j=1; j < arr.length-i; j++){ if(arr[j-1] > arr[j]){ temp=arr[j-1]; arr[j-1] = arr[j]; arr[j] = temp; } } //check that last index has highest value in first loop, //second last index has second last highest value and so on System.out.println("Array after "+(i+1)+"th iteration:"+Arrays.toString(arr)); } return arr; } }
排序算法很多,气泡排序更易于实现。
排序很复杂,您应该依靠Java API方法对集合或者数组进行排序,以获得更好的性能,而这又需要重新发明轮子。
还要提及在排序中使用Comparable和Comparator将为您增加奖励积分。
读取3个输入字符串,连接和打印
package com.theitroad.javaprograms; import java.util.Scanner; public class ReadStringAndConcat { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Enter number of Strings to Concatenate:"); int n = scanner.nextInt(); String[] input = new String[n]; for(int i=0; i<n; i++) { System.out.println("Please enter String number "+n+" and press enter:"); input[i] = scanner.next(); } //close Scanner and avoid resource leak scanner.close(); String output = concat(input); System.out.println("Concatenation Result = "+output); } private static String concat(String[] input) { StringBuilder sb = new StringBuilder(); for(String s : input) sb.append(s); return sb.toString(); } }
程序可以灵活地连接任意数量的字符串,这表明了对代码重用并保持灵活的想法。
当某人运行该程序时,正确的消息可以指导用户。
使用StringBuilder而不是String +运算符进行串联。
我们一完成就关闭资源,从而避免了内存泄漏。
显示良好的编程习惯。
从整数数组中删除奇数
package com.theitroad.javaprograms; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; public class RemoveOddNumbers { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Enter comma separated numbers for input int array, for example '1,2,3,4'"); String input = scanner.next(); scanner.close(); //convert to int array String[] inArray = input.split(","); int [] intArray = new int[inArray.length]; int index = 0; for(String s : inArray) { intArray[index] = Integer.parseInt(s.trim()); index++; } //call a function to remove odd numbers Integer[] result = removeOddNumbers(intArray); System.out.println(Arrays.toString(result)); } private static Integer[] removeOddNumbers(int[] intArray) { //we will have to use list because we don't know exact size of the result array List<Integer> list = new ArrayList<>(); for(int i : intArray) { if(i%2 == 0) list.add(i); } return list.toArray(new Integer[list.size()]); } }
如果您正在阅读此代码,则应该看到它符合上述所有要点。
尝试编写简洁明了的代码,遵循最佳实践,为方法和变量命名约定,这样您会很好。
从列表中删除所有匹配的元素
package com.theitroad.javaprograms; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Scanner; public class DeleteFromList { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Enter comma separated list of Strings. For example 'a,b,c,b,a'"); String input = scanner.next(); System.out.println("Enter String to remove from the input list."); String strToDelete = scanner.next(); scanner.close(); List<Object> inputList = new ArrayList<>(); String[] inputStrings = input.split(","); for (String s : inputStrings) inputList.add(s.trim()); inputList = removeAll(inputList, strToDelete); System.out.println("Result List = "+inputList); } private static List<Object> removeAll(List<Object> inputList, Object objToDelete) { Iterator<Object> it = inputList.iterator(); while(it.hasNext()) { Object obj = it.next(); if(obj.equals(objToDelete)) it.remove(); } return inputList; } }
请注意,为对象列表创建了removeAll方法,因此它将与任何类型的列表一起使用。
这就是我们编写可重用代码的方式。使用迭代器从列表中删除元素。
修剪输入以消除输入字符串中的任何意外空格。
四舍五入和小数位数为2的数字的平均值
package com.theitroad.javaprograms; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Scanner; public class AverageOfNumbers { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Please enter the total number of integers."); int count = scanner.nextInt(); int sum = 0; for (int i = 0; i < count; i++) { System.out.println("Please enter number " + (i + 1) + ":"); sum += scanner.nextInt(); } System.out.println("Sum=" + sum + ",Count=" + count); BigDecimal average = new BigDecimal((double) sum/count); average = average.setScale(2, RoundingMode.HALF_UP); System.out.println("Average of entered numbers = " + average); scanner.close(); } }
交换两个数字
package com.theitroad.javaprograms; import java.util.Scanner; public class SwappingNumbers { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Enter the first number:"); int first = scanner.nextInt(); System.out.println("Enter the second number:"); int second = scanner.nextInt(); scanner.close(); System.out.println("Initial value of numbers are: "+first+" and "+second); first = first + second; second = first -second; first = first - second; System.out.println("Value of numbers after swapping are: "+first+" and "+second); } }
我们可以使用一个临时变量轻松地交换数字。