返回字符串的方法
所以我正在用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')。 有什么建议么?
只需将每个转换后的字符附加到一个StringBuilder
或StringBuffer
。
这是一个递归解决方案:
你想用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