所以问的问题是:要改变字符串前面有3个字符的字符,所以我们可以说字符串是" AB cd"它将改为:" DE fg"。我不擅长编程,但我已经尽了最大努力并想出了这个:
import java.util.*;
public class encrypt{
public static void main(String[] args){
Scanner reader = new Scanner(System.in);
System.out.println("Enter a message to encrypt: ");
String message = reader.nextLine();
List<Character> Lowercase = Arrays.asList('a','b','c','d','e','f','g','h','i','j',
'k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
List<Character> Uppercase = Arrays.asList('A','B','C','D','E','F','G','H','I','J',
'K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
for ( int i = 0; i < message.length(); i++ ) {
char c = message.charAt( i );
if( c == ' '){
continue;
}
else if (c != ' '){
for ( int i = 0; i < Lowercase.size(); i++ ) {
char b = Lowercase.indexOf(i);
if(c == b){
message.charAt(i)=Lowercase.indexOf(i+3);
}
}
}
for ( int i = 0; i < Uppercase.size(); i++ ) {
char j = Uppercase.indexOf(i);
if(c == j){
message.charAt(i)=Uppercase.indexOf(i+3);
}
}
}
}
}
我遇到的错误如下:
Problem1.java:20: error: variable i is already defined in method main(String[])
for ( int i = 0; i < Lowercase.size(); i++ ) {
^
Problem1.java:21: error: possible loss of precision
char b = Lowercase.indexOf(i);
^
required: char
found: int
Problem1.java:23: error: unexpected type
message.charAt(i)=Lowercase.indexOf(i+3);
^
required: variable
found: value
Problem1.java:27: error: variable i is already defined in method main(String[])
任何帮助将不胜感激:)谢谢。
答案 0 :(得分:1)
除了dmcqu314提供的有用链接之外,还有一些关于代码和发生错误的想法。
第20行出错
for ( int i = 0; i < message.length(); i++ ) {
正如@Jama Jurayevich所说,你真的应该使用另一个变量而不是&#39; i&#39;对于内环。使用&#39;&#39;例如。这会有所帮助 - 因为其他错误而不是很多。
第21行出错
char b = Lowercase.indexOf(i);
Lowercase.indexOf(i)将检索(签名)int类型。将其赋值为char类型(char b)会引发类型转换为类似unsigned int(即char)的类型 - 因此提示&#34;可能会丢失精度&#34;。
第23行出错
message.charAt(i)=Lowercase.indexOf(i+3);
在这里,您尝试为字符串方法分配一个int值。这根本不可能。字符串是Java中的最终对象。并且无法为方法分配内容。如果你想将一个字符串附加到字符串,你可以这样做(例子):
String newString = new String();
...
newString = newString + 'a'
椭圆用于您选择的其他编码。
希望这些提示可以帮助你解决一些困惑。
答案 1 :(得分:0)
我猜你正在尝试完成的是凯撒赛克。看看这篇文章: Java Int & ASCII Question
答案 2 :(得分:0)
这是一个解决方案。将其与您当前的代码进行比较,看看如何纠正错误。
我也这样做了它会循环到数组的前面,用于字母表末尾的字母。 IE:输入字母&#39; Z&#39;将输出&#39; C&#39;。
import java.util.*;
class encrypt
{
public static void main (String[] args) throws java.lang.Exception
{
char c,b,j;
Scanner reader = new Scanner(System.in);
System.out.println("Enter a message to encrypt: ");
String message = reader.nextLine();
char[] messageArray = message.toCharArray();
List<Character> Lowercase = Arrays.asList('a','b','c','d','e','f','g','h','i','j',
'k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
List<Character> Uppercase = Arrays.asList('A','B','C','D','E','F','G','H','I','J',
'K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
for (int i = 0; i < message.length(); i++ ) {
c = messageArray[i];
if (c != ' '){
for (int x = 0; x < Lowercase.size(); x++ ) {
b = (char)(Lowercase.get(x));
if(c == b){
int n = (x+3)%Lowercase.size();
messageArray[i]=Lowercase.get(n);
}
}
for (int y = 0; y < Uppercase.size(); y++ ) {
j = (char)(Uppercase.get(y));
if(c == j){
int m = (y+3)%Lowercase.size();
messageArray[i]=Uppercase.get(m);
}
}
}
}
System.out.println(messageArray);
}
}
答案 3 :(得分:0)
我相信有一种更简单的方法可以解决您的问题,您可以在ASCII table
找到答案
如你所见,单词中有一些与他们相关的数字,如A
65
而小c
是99
,因此,您可以通过编号并使用转换过程来获得你想要的字符。
read more casting from string to int
我认为你应该试试这个
代码:
String s = "eh az";
for (int i = 0; i < s.length(); i++) {
int a = s.charAt(i);
if (a >= 97 && a <= 119) {
System.out.print((char) (s.charAt(i) + 3));
} else if (a >= 120 && a <= 122) {
a -= 23;
System.out.print((char) a);
} else if (a == 32) {
System.out.print(" ");
}
}
输出:
hk dc