简单的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);
}
}
我们可以使用一个临时变量轻松地交换数字。

