Java使用递归将输入更改为大写
嗨,我对使用递归将输入更改为大写有问题。这是我的家庭作业,说明书上说我不允许使用toUpperCase()和/或isUpperCase()方法 我尝试过使用loop,它很有效Java使用递归将输入更改为大写,java,recursion,uppercase,Java,Recursion,Uppercase,嗨,我对使用递归将输入更改为大写有问题。这是我的家庭作业,说明书上说我不允许使用toUpperCase()和/或isUpperCase()方法 我尝试过使用loop,它很有效 import java.util.Arrays; public class hw5 { static void convertCase(String str) { int[] asciiArray = new int[str.length()]; char[] charArra
import java.util.Arrays;
public class hw5 {
static void convertCase(String str) {
int[] asciiArray = new int[str.length()];
char[] charArray = new char[asciiArray.length];
int ascii = 0;
for(int i = 0; i < str.length(); i++) {
char character = str.charAt(i);
ascii = (int) character;
//change the value if lower case
if(ascii >= 97 && ascii <= 122) {
asciiArray[i] = ascii-32;
charArray[i] = (char) asciiArray[i];
}
//don't change the value if the value is already uppercase or 0-9 (I think this is the base case)
else if((ascii >= 65 && ascii <= 90) || (ascii >= 48 && ascii <= 57)) {
asciiArray[i] = ascii;
charArray[i] = (char) asciiArray[i];
}
System.out.print(charArray[i]);
}
}
public static void main(String[] args) {
convertCase("uPPerCAse123");
}
}
如何使用递归编写它们?我们可以将递归引入当前逻辑的一种方法是用递归调用替换迭代的
for
循环:
public static void convertCase(String str) {
convertCase(str, 0, str.length()-1);
}
private static void convertCase(String input, int start, int end) {
if (input == null || start > end) {
return;
}
char character = input.charAt(start);
int ascii = (int) character;
if (ascii >= 97 && ascii <= 122) {
character = (char)(ascii-32);
}
System.out.print(character);
convertCase(input, start+1, end);
}
public static void main(String args[]) throws Exception {
convertCase("all lowercase HERE");
}
每个递归调用使用start
输入指针打印字符串的一个字母。然后,它进行递归调用,将起始指针递增1,以递归方式沿着输入字符串向下运行。publicstringstringtouppercase(stringstr){
public String stringToUpperCase(String str){
if (str.length==1) return charToUpperCase((char)str[0]);
return charToUpperCase((char)str[0]) + stringToUpperCase(str.substring(1,str.length-1));
public Char charToUpperCase(Char char){
int ascii = (int)char;
if (ascii >= 97 && ascii <= 122) {
ascii -= 32;
}
return (Char)ascii;
}
public static void(String... args){
System.out.println(stringToUpperCase("asdf");
}
if(str.length==1)返回charToUpperCase((char)str[0]);
返回charToUpperCase((char)str[0])+stringToUpperCase(str.substring(1,str.length-1));
公共Char charToUpperCase(Char-Char){
int ascii=(int)字符;
如果(ascii>=97&&ascii公共类Main{
公共静态void main(字符串[]args){
字符串word=“sathira”;
convertUpper(word,word.length());
}
静态空值(字符串字,整数长度){
if(word==null | | length==0)
返回;
字符=word.charAt(长度-1);
int ascii=(int)字符;
如果(ascii>=97&&ascii此处我的版本将一个字符转换为大写(仅ascii,未测试):
char-static-toUpper(char-ch){
如果(ch>='a'&&ch='a'&&ch,这里是Java中的递归实现。它基于头递归-
public class Main {
public static void main(String []args){
String changed = toUpperCaseRec("sTr12uv3X");
System.out.println(changed);
}
static String toUpperCaseRec(String str) {
if(str == null || str.length() == 0) {
return "";
}
String rem = toUpperCaseRec(str.substring(1));
Character cc = convertToUppercase(str.charAt(0));
return cc+rem;
}
static Character convertToUppercase(Character chr) {
if(chr >= 97 && chr <= 122) {
return (char)(chr - 32);
} else {
return chr;
}
}
公共类主{
公共静态void main(字符串[]args){
字符串已更改=toUpperCaseRec(“sTr12uv3X”);
系统输出打印项次(更改);
}
静态字符串toUpperCaseRec(字符串str){
如果(str==null | | str.length()==0){
返回“”;
}
字符串rem=toUpperCaseRec(str.substring(1));
字符cc=convertToUppercase(str.charAt(0));
返回cc+rem;
}
静态字符转换器大写(字符chr){
如果(chr>=97&&chr你能给我们提供你迄今为止一直在使用的递归方法吗?奇怪的要求。递归不是这个家庭作业的好选择。太快了!如何获得这种递归思维水平?它对我帮助很大。实际上这只是我家庭作业的一小部分,但我可以从这里调整它。谢谢蒂姆。@CarlosHeuberger我们可能更希望在分治算法中使用递归,例如合并排序。我不会在这个问题上使用递归,事实上,迭代很好。我只给出这个建议答案,作为引入递归的一种可能。这个逻辑也很有效。有趣的是,我可以使用多种方法来实现它。我将尝试使用根据这里的答案唱我自己的逻辑。谢谢你……用'a'
代替97不是更好吗?为什么转换成int
,char
已经是一个整数值了?
public String stringToUpperCase(String str){
if (str.length==1) return charToUpperCase((char)str[0]);
return charToUpperCase((char)str[0]) + stringToUpperCase(str.substring(1,str.length-1));
public Char charToUpperCase(Char char){
int ascii = (int)char;
if (ascii >= 97 && ascii <= 122) {
ascii -= 32;
}
return (Char)ascii;
}
public static void(String... args){
System.out.println(stringToUpperCase("asdf");
}
public class Main {
public static void main(String [] args){
String word ="sathira";
convertUpper(word,word.length());
}
static void convertUpper(String word,int length){
if (word==null||length ==0)
return;
char character = word.charAt(length-1);
int ascii = (int) character;
if (ascii >= 97 && ascii <= 122) {
character = (char)(ascii-32);
}
convertUpper(word,length-1);
System.out.print(character);
}
char static toUpper(char ch) {
if (ch >= 'a' && ch <= 'z') {
ch += 'A' - 'a';
}
return ch;
}
ch = (ch >= 'a' && ch <= 'z') ? (char) (ch + 'A' - 'a') : ch;
public class Main {
public static void main(String []args){
String changed = toUpperCaseRec("sTr12uv3X");
System.out.println(changed);
}
static String toUpperCaseRec(String str) {
if(str == null || str.length() == 0) {
return "";
}
String rem = toUpperCaseRec(str.substring(1));
Character cc = convertToUppercase(str.charAt(0));
return cc+rem;
}
static Character convertToUppercase(Character chr) {
if(chr >= 97 && chr <= 122) {
return (char)(chr - 32);
} else {
return chr;
}
}