返回字符串的方法

所以我正在用Java做一个简单的加密程序。 用户输入一个字符串(strTarget),然后该字符串被带到这个函数。 在for循环中,它应该采用该字符的ASCII值,将其减少4,然后将其返回给字符串(对字符串中的所有字符执行该操作)。 正如你看到我的朋友,我已经这样做了,但是,我不确定如何重建我想要返回的字符串(例如,如果用户输入'efg',返回的字符串应该是'abc')。

所以,这是我得到这些建议的结果。 我很明显在Menu类中做了错误的事,不确定它是什么。 当我输入要加密的字符串时,它停止工作。

import java.util.Scanner;

public class Menu {

public static String strTarget;

public static void main(String[] args) {


    Scanner in = new Scanner(System.in);

    System.out
            .println("Welcome to the encr/decr program");
    System.out
            .println("To encrypt a string, press 1, to decrypt a string, press 2");
    int choice = in.nextInt();
    if (choice == 1) {
        System.out.println("Type the string you want to encrypt.");
        strTarget = in.next();
        System.out.println(Encrypt(strTarget));
    }
    if (choice == 2) {
        System.out.println("Enter the string you want to decrypt.");
    }

}

private static String Encrypt(String strTarget) {
    // TODO Auto-generated method stub
    int len = strTarget.length()-1;

    String destination = "";

    for (int i = 0; i<len; i++)
    {

        if (strTarget.charAt(i) != ' ')
        {
            char a = strTarget.charAt(i);
            int b = (int) a;
            b = strTarget.charAt(i)-4;
            a = (char) b;
            if ( b<70 && b>64)
            {
                b = strTarget.charAt(i)+26;
                a = (char) b;

                destination += a;
            }
        }


    }
    return destination; 

}}

编辑:添加完整的程序。

import java.util.Scanner;

public class Menu {

public static String strTarget;

public static String destination = "";

public static void main(String[] args) {


Scanner in = new Scanner(System.in);

System.out.println("Welcome to the encr/decr program");

System.out.println("To encrypt a string, press 1, to decrypt a string, press 2");



int choice = in.nextInt();

if (choice == 1) {
    System.out.println("Type the string you want to encrypt.");

    strTarget = in.next();

    StringBuilder zomg = new StringBuilder(strTarget);

    System.out.println(Encrypt(zomg));


}

if (choice == 2) {
    System.out.println("Enter the string you want to decrypt.");
}

}

 private static String Encrypt(StringBuilder zomg) {
// TODO Auto-generated method stub

int len = strTarget.length()-1;

for (int i = 0; i<len; i++)
{

    if (strTarget.charAt(i) != ' ')
    {
        char a = strTarget.charAt(i);
        int b = (int) a;
        b = strTarget.charAt(i)-4;
        a = (char) b;
        destination += a;
        if ( b<70 && b>65)
        {
            b = strTarget.charAt(i)+26;
            a = (char) b;
            destination += a;
        }
    }


}
System.out.println(destination);
return destination; 

}}

我做了你所说的改变(我认为),并且它开始工作,但它没有像预期的那样工作。 给出一些似乎没有道理的结果(对于'A',它返回=,对于'V',它返回'V')。 有什么建议么?


只需将每个转换后的字符附加到一个StringBuilderStringBuffer


这是一个递归解决方案:

你想用Encrypt(string,0)来调用它,

private static String Encrypt(String strTarget, int place) {
// TODO Auto-generated method stub
    if (place==strTarget.length()) {
        return strTarget;
    }
    if (strTarget.charAt(place) != ' ')
    {
        char a = strTarget.charAt(place);
        int b = (int) a;
        b = strTarget.charAt(place)-4;
        a = (char) b;
        if ( b<70 && b>64)
        {
            b = strTarget.charAt(place)+26;
            a = (char) b;
        }
        return Encrypt(strTarget.substring(0,place)+a+strTarget.substring(place+1,strTarget.length()),place+1);
    }
    return null;
}

你可能想尝试如下的东西:

private static String encrypt(String strTarget) {
    char[] chars = strTarget.toCharArray();
    for(int i=0; i<chars.length; i++) {
        if(chars[i] != ' ') {
            int asciiVal = chars[i];
            asciiVal -= 4;
            if(asciiVal < 70 && asciiVal > 64) {
                asciiVal += 26;                    
            }
            chars[i] = (char) asciiVal;
        }
    }
    return String.valueOf(chars);
}
链接地址: http://www.djcxy.com/p/20885.html

上一篇: Method to return string

下一篇: Object by Reference vs. Reference by Value