Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java使用递归将输入更改为大写_Java_Recursion_Uppercase - Fatal编程技术网

Java使用递归将输入更改为大写

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

嗨,我对使用递归将输入更改为大写有问题。这是我的家庭作业,说明书上说我不允许使用toUpperCase()和/或isUpperCase()方法

我尝试过使用loop,它很有效

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;
    }
}