为什么我的java项目的输出中的字母是一个在另一个下面?

为什么我的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

我用java做了一个项目,用户写一个句子,当他按下enter键时,他写的字母会被翻译成如下符号:@!&&&!。问题是这些符号被一个接一个地打印出来,这是一个问题,因为我做的第二个项目,将符号翻译回字母,但它无法翻译它们,因为它们之间有一个空白。我在互联网上搜索了它,在StackOverflow上找到了这篇文章:https://stackoverflow.com/questions/37632058/how-to-convert-a-letter-to-an-another-letter-in-java 但我不明白它是怎么工作的。有没有办法修复我自己的程序?请帮帮我!问题可能是因为我保存了用户放入数组中的字符,但我不确定。该项目正在NetBeans上运行,我的项目代码如下:

    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);
    }
}