将字符串作为输入S。编写一个函数,用具有较高ASCII码的字符替换每个奇数字符,并用具有较低ASCII码的字符替换每个偶数字符。打印返回的值。
package assignments;
import java.util.Scanner;
public class strings_odd_even_char {
static Scanner scn = new Scanner(System.in);
public static void main(String[] args) {
String str = scn.nextLine();
for (int i = 0; i < str.length(); i = i + 2) {
char ch = str.charAt(i);
ch = (char)((ch + 1));
System.out.println(ch);
}
for (int j = 1; j < str.length(); j = j + 2) {
char ch = str.charAt(j);
ch = (char)((ch - 1));
System.out.print(ch);
}
}
}
我的代码的问题是,它首先打印所有奇数字符的值,然后打印偶数字符,但是我想要的是按正确的顺序打印它们,例如输入-> abcg,输出应该是-> badf。
答案 0 :(得分:2)
只需使用一个处理两个字符的循环:
for (int i = 0; i < str.length(); i = i + 2) {
char ch = str.charAt(i);
ch = (char) (ch + 1);
System.out.print(ch);
if (i + 1 < str.length()) {
ch = str.charAt(i + 1);
ch = (char) (ch - 1);
System.out.print(ch);
}
}
答案 1 :(得分:2)
您只需要迭代一次,但根据(char+1)
进行不同的操作(char-1)
或i
:
public static void main(String[] args) {
String str = scn.nextLine();
for(int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if(i % 2 == 0) { // even
ch += 1;
} else { // odd
ch -= 1;
}
System.out.print(ch);
}
}
答案 2 :(得分:2)
我将在变量中保存“ incremenet”值,并在输入字符时在+1
和-1
之间进行替换:
private static String change(String s) {
StringBuilder sb = new StringBuilder(s.length());
int increment = 1;
for (int i = 0; i < s.length(); ++i) {
sb.append((char)(s.charAt(i) + increment));
increment *= -1;
}
return sb.toString();
}
答案 3 :(得分:1)
您正在使用两个循环,但只需要一个。您可以使用%
运算符来判断i
是偶数还是奇数,然后相应地减去或相加:
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if(i % 2 == 0) {
ch = (char)((ch + 1));
System.out.println(ch);
} else {
ch = (char)((ch - 1));
System.out.print(ch);
}
}
答案 4 :(得分:1)
您可以在一个for loop
中执行此操作,为此,您需要检查当前索引是偶数还是奇数。如果当前索引为偶数,则将增加char并打印;如果当前索引为奇数,则将减少char并打印。使用%
运算符检查偶数还是奇数
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if(i%2 == 0) {
ch = ch + 1;
System.out.println(ch);
continue;
}
ch = ch - 1;
System.out.println(ch);
}