Method to return string
So I'm doing a simple encryption program in Java. The user inputs a string (strTarget), and then that string is taken to this function. In the for-loop, it should take the character's ASCII value, reduce it by 4, and then return it to the string (doing that for all characters in the string). As you see my friends, I have already done that, however, I am not sure on how to reconstruct the string that I wish to get back (eg if a user inputs 'efg', the returned string should be 'abc')
So, here's the result I got with the suggestions. I'm obviously doing something wrong in the Menu class, not sure what it is. It stops working when I input a string to be encrypted.
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;
} }
EDIT: Added the full program.
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;
} }
I made the changes you said (I think), and it start to work, but it isn't working as it is supposed to. Gives some results which do not seem to make sense (for 'A', it return =, for 'V', it returns 'V'). Any suggestions?
只需将每个转换后的字符附加到一个StringBuilder
或StringBuffer
。
Here is a recursive solution:
You want to call it with 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/20886.html
下一篇: 返回字符串的方法