以下是问题:
从用户获取逗号分隔的数字字符串并打印奇数和偶数的集合。
示例输入:
1,2,3,4,5,6,7,8,9,10
示例输出:
奇数:
1,3,5,7,9
偶数:
2,4,6,8,10
示例输入:
20,30,40
示例输出:
偶数:
20,30,40
我的代码:
class OddEv{
public static void main(String args[]){
String s;
Scanner in=new Scanner(System.in);
s=in.nextLine();
for(int i=0;i<s.length();i++){
if(s.charAt(i)%2==0){
System.out.print(s.charAt(i));
}
if(s.charAt(i)%2!=0){
System.out.print(s.charAt(i));
}
}
但我没有得到正确的答案。我应该根据问题
带来什么更改来获得正确的输出 实际上我不太了解java,所以我不知道该怎么做答案 0 :(得分:3)
您可以尝试这种简单的解决方案,而不使用任何其他概念,例如regex
。为此,您可以拆分字符串并将其存储在字符串数组中,然后迭代数组,可以检查数字是奇数还是偶数。以下代码会将字符串中的所有偶数和奇数存储到名为even
和odd
的数组中。
String s = "1,2,3,4,5,6,7,8,9,10";
int even[] = new int[10];
int odd[] = new int[10];
String ar[] = s.split(",");
int j=0,k=0,oddChecker=0,evenChecker=0;
for(int i=0;i<ar.length;i++){
if(Integer.parseInt(ar[i])%2 == 0){
even[j] = Integer.parseInt(ar[i]);
++j;
evenChecker = 1;
}
else{
odd[k] = Integer.parseInt(ar[i]);
++k;
oddChecker = 1;
}
}
if(oddChecker == 0){
System.out.println("even");
System.exit(0);
}
if(evenChecker == 0){
System.out.println("odd");
System.exit(0);
}
System.out.println("Even numbers:");
for(int i=0;i<j;i++){
if(i!=j-1){
System.out.print(even[i]+",");
}
else{
System.out.print(even[i]);
}
}
System.out.println();
System.out.println("Odd numbers:");
for(int i=0;i<k;i++){
if(i!=k-1){
System.out.print(odd[i]+",");
}
else{
System.out.print(odd[i]);
}
}
<强>输出:强>
偶数:
2,4,6,8,10奇数:
1,3,5,7,9
在检查条件并向数组添加数字时,不要忘记将String转换为Integer。为此,我使用了Integer.parseInt(your_string)
。
答案 1 :(得分:2)
使用两个ArrayList
Integer
获得赔率和赔率,然后将String s
更改为String []s
,然后使用userInput.split(",")
分隔数字。使用Integer.parseInt(str)
方法将s中的字符串解析为整数,然后使用if语句确定number是奇数还是偶数,并将它们添加到arraylists中。
public static void main(String args[]) {
String s[];
Scanner in = new Scanner(System.in);
s = in.nextLine().split(",");
ArrayList<Integer> odds = new ArrayList<>();
ArrayList<Integer> evens = new ArrayList<>();
for (String item : s) {
int number = Integer.parseInt(item);
if (number % 2 == 0) {
evens.add(number);
} else {
odds.add(number);
}
}
}
<小时/> 您可以使用以下代码在输出中打印结果:
System.out.println("Even Numbers:");
System.out.println(Arrays.toString(evens.toArray()).replaceAll("[\\p{Ps}\\p{Pe}]", ""));
System.out.println("Odd Numbers:");
System.out.println(Arrays.toString(odds.toArray()).replaceAll("[\\p{Ps}\\p{Pe}]", ""));
<小时/> 示例输入:
10,11,12,13,14,15,16,17,18,19,20
示例输出:
Even Numbers:
10, 12, 14, 16, 18, 20
Odd Numbers:
11, 13, 15, 17, 19
答案 2 :(得分:0)
希望这能解决您的问题
public class CommaSeperatedNum {
public static void main(String args[]){
String s;
Scanner in=new Scanner(System.in);
s=in.nextLine();
String numarray[] = s.split(",");
int odd[] = new int[20];
int oddcnt=0;
int even[] = new int[20];
int evencnt =0;
for(int i=0;i<numarray.length;i++)
{
if( Integer.parseInt((numarray[i]).trim())%2 ==0){
odd[oddcnt] = Integer.parseInt(numarray[i].trim());
oddcnt++;
}
{
even[evencnt] = Integer.parseInt(numarray[i].trim());
evencnt++;
}
}
System.out.print("Odd Numbers : " );
for (int i = 0; i < odd.length && odd[i] != 0; i++) {
System.out.print(odd[i]+" " );
}
System.out.println();
System.out.print("Even Numbers : " );
for (int i = 0; i < even.length && even[i] != 0; i++) {
System.out.print(even[i]+" " );
}
}
答案 3 :(得分:0)
以下是功能更少的移动部件的更具功能性的解决方案:
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
String[] split = in.nextLine().split(",");
String evens = Arrays.stream(split)
.filter(number -> Integer.parseInt(number) % 2 == 0)
.collect(Collectors.joining(","));
String odds = Arrays.stream(split)
.filter(number -> Integer.parseInt(number) % 2 != 0)
.collect(Collectors.joining(","));
System.out.println("Even Numbers:\n" + evens);
System.out.println("Odd Numbers:\n" + odds);
}
是的,我知道,效率很低。可能有更好的方法,但我只是想让OP得到一个代码的描述性和简单性的暗示。
答案 4 :(得分:0)
带有 partitioningBy
的 lambda 进行分离
字符串是偶数还是奇数只取决于最后一位数
不需要转换成数值
String inp = "1,2,3,4,5,6,7,8,9,10";
String[] nums = inp.split( "," );
Map<Boolean, List<String>> map = Arrays.stream( nums ).collect(
partitioningBy(s -> "02468".indexOf(s.charAt(s.length() - 1)) >= 0));
System.err.println( "even: " + map.get( true ) );
System.err.println( "odd: " + map.get( false ) );
even: [2, 4, 6, 8, 10]
odd: [1, 3, 5, 7, 9]