为什么我的java项目的输出中的字母是一个在另一个下面?
我用java做了一个项目,用户写一个句子,当他按下enter键时,他写的字母会被翻译成如下符号:@!&&&!。问题是这些符号被一个接一个地打印出来,这是一个问题,因为我做的第二个项目,将符号翻译回字母,但它无法翻译它们,因为它们之间有一个空白。我在互联网上搜索了它,在StackOverflow上找到了这篇文章:https://stackoverflow.com/questions/37632058/how-to-convert-a-letter-to-an-another-letter-in-java 但我不明白它是怎么工作的。有没有办法修复我自己的程序?请帮帮我!问题可能是因为我保存了用户放入数组中的字符,但我不确定。该项目正在NetBeans上运行,我的项目代码如下:为什么我的java项目的输出中的字母是一个在另一个下面?,java,arrays,netbeans,Java,Arrays,Netbeans,我用java做了一个项目,用户写一个句子,当他按下enter键时,他写的字母会被翻译成如下符号:@!&&&!。问题是这些符号被一个接一个地打印出来,这是一个问题,因为我做的第二个项目,将符号翻译回字母,但它无法翻译它们,因为它们之间有一个空白。我在互联网上搜索了它,在StackOverflow上找到了这篇文章:https://stackoverflow.com/questions/37632058/how-to-convert-a-letter-to-an-another-letter-in-j
package kodikopoihsh2;
import java.util.Scanner;
/**
*
* @author user
*/
public class Kodikopoihsh2 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Scanner input = new Scanner(System.in);
System.out.println("write your text in order to be encrypted: ");
char[] letters = input.nextLine().toCharArray();
String a;
String b;
String c;
String d;
String e;
String f;
String g;
String h;
String i;
String j;
String k;
String l;
String m;
String n;
String o;
String p;
String q;
String r;
String s;
String t;
String u;
String v;
String w;
String x;
String y;
String z;
String aa;
String ab;
for (int counter = 0; counter < 99999; counter++){
if(letters[counter] == 'a'){
a = "!";
System.out.println(a);
}
if(letters[counter] == 'b'){
b = "@";
System.out.println(b);
}
if(letters[counter] == 'c'){
c = "#";
System.out.println(c);
}
if(letters[counter] == 'd'){
d = "$";
System.out.println(d);
}
if(letters[counter] == 'e'){
e = "%";
System.out.println(e);
}
if(letters[counter] == 'f'){
f = "^";
System.out.println(f);
}
if(letters[counter] == 'g'){
g = "&";
System.out.println(g);
}
if(letters[counter] == 'h'){
h = "*";
System.out.println(h);
}
if(letters[counter] == 'i'){
i = "(";
System.out.println(i);
}
if(letters[counter] == 'j'){
j = ")";
System.out.println(j);
}
if(letters[counter] == 'k'){
k = "-";
System.out.println(k);
}
if(letters[counter] == 'l'){
l = "_";
System.out.println(l);
}
if(letters[counter] == 'm'){
m = "=";
System.out.println(m);
}
if(letters[counter] == 'n'){
n = "+";
System.out.println(n);
}
if(letters[counter] == 'o'){
o = "`";
System.out.println(o);
}
if(letters[counter] == 'p'){
p = "~";
System.out.println(p);
}
if(letters[counter] == 'q'){
q = "1";
System.out.println(q);
}
if(letters[counter] == 'r'){
r = "2";
System.out.println(r);
}
if(letters[counter] == 's'){
s = "3";
System.out.println(s);
}
if(letters[counter] == 't'){
t = "4";
System.out.println(t);
}
if(letters[counter] == 'u'){
u = "5";
System.out.println(u);
}
if(letters[counter] == 'v'){
v = "6";
System.out.println(v);
}
if(letters[counter] == 'w'){
w = "7";
System.out.println(w);
}
if(letters[counter] == 'x'){
x = "8";
System.out.println(x);
}
if(letters[counter] == 'y'){
y = "9";
System.out.println(y);
}
if(letters[counter] == 'z'){
z = "0";
System.out.println(z);
}
if(letters[counter] == ' '){
aa = " ";
System.out.println(aa);
}
if(letters[counter] == '?'){
ab = "?";
System.out.println(ab);
}
}
}
}
首先,打印字符串并在其后添加新行。这就是为什么每个字母都在一行。尝试使用
然后,该错误意味着您试图访问超出数组长度的索引
你为什么不试试这个:
for (int counter = 0; counter < letters.length; counter++){
使用此边界,您将始终访问字母数组中的索引
此外,fews提示:
查看语法以提高代码的可读性。
您可以将加密的字符存储到数组中,而不是为每个字符使用字符串
打印第一个字符串:在扫描仪之前,按加密顺序写入文本。否则,您必须在显示字符串之前键入密码。
你的方法很复杂。尝试使用不同的方法,输入字母字符串和翻译字符字符串。然后,只需将给定位置的字符替换为已翻译字符串的字符。像这样:
static String letters = "abcdefghijklmnopqrstuvwxyz0123456789"; //etc...
static String translated = "@€#!*"; //etc...
String input = "hi";
String output = "";
for(int i = 0; i < input.length(); i++){
output += translated.charAt(letters.indexOf(input.charAt(i)));
}
你好,我想最大的问题是你的代码。我不太理解,但我认为这段代码可能有效:
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
private static final Map<Character, Character> encriptionTable = new HashMap<Character, Character>() {{
put('a', '!');
put('b', '*');
//....
}};
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("write your text in order to be encrypted: ");
char[] letters = input.nextLine().toCharArray();
for(int i = 0; i < letters.length; i++) if(encriptionTable.containsKey(letters[i])) letters[i] = encriptionTable.get(letters[i]);
System.out.println(letters);
}
}
哇!谢谢,我会试试看它是否有效。感谢您的快速回复!嗯,你能告诉我如何使用数组吗?好的,那么:1。我尝试了你的解决方案,它确实纠正了错误,非常感谢!2.我还没有学会如何使用switch/case语法,你能帮我吗?虽然我认为没有必要。我也不知道如何将加密的字符存储到数组中。你能帮我吗?4.我打印了我的第一个字符串写下你的文本以便在Scanner.Np之前进行加密,对于数组,看看Luis的解决方案,这是个好主意。如果我的答案有效,请毫不犹豫地将其标记为解决方案:我不太理解您的代码,但我尝试了它,它给了我一些错误。我能做些什么来修复它吗?我应该把错误发送给你,这样你就可以修复它们吗?是的,发送错误,我会尽力解释错误。请发送您的全部代码和错误。哦,对不起。。。我找到了我一直在寻找的答案。谢谢你抽出时间。它很有效,谢谢!因为你用的是println。改用打印。非常感谢!这就是我一直在等待的答案!!!我想编辑我的代码,而不是写另一个项目!谢谢我是java新手,我不知道它的存在!
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
private static final Map<Character, Character> encriptionTable = new HashMap<Character, Character>() {{
put('a', '!');
put('b', '*');
//....
}};
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("write your text in order to be encrypted: ");
char[] letters = input.nextLine().toCharArray();
for(int i = 0; i < letters.length; i++) if(encriptionTable.containsKey(letters[i])) letters[i] = encriptionTable.get(letters[i]);
System.out.println(letters);
}
}