Java 使用charAt方法,赢得';不要将它们添加为Int,也不要打印为string。会解释得更好

Java 使用charAt方法,赢得';不要将它们添加为Int,也不要打印为string。会解释得更好,java,string,char,int,ascii,Java,String,Char,Int,Ascii,好的,这是我的代码: import java.util.Scanner; public class CarRental { public static String model; public static int letternum; public static String plate; public static String letter; public static int total; public st

好的,这是我的代码:

import java.util.Scanner;

public class CarRental {

    public static String model;
    public static int letternum;
    public static String plate;
    public static String letter;
    public static int total;              
    public static String alphabet = "abcdefghijklmnopqrstuvwxyz";

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        //System.out.println("Car Model:");
        //model = input.nextLine();
        System.out.println("License Plate: ");
        plate = input.nextLine();

        char one = plate.charAt(0);
        char two = plate.charAt(1);
        char three = plate.charAt(2);
        total = one + two + three;
        letternum = total % 24;

        char letter = alphabet.charAt(letternum);

        System.out.println("" + letter + total);

    }
}
发生的事情是这样的,我试图让它接受我的车牌输入,并在0、1和2的位置上输入字符。车牌上有三个字母。然后,我尝试获取它们的ASCII值,将它们全部相加,并将它们设置为int“total”。然后,为了找到一个应该位于总值前面的字母,我使用%6找到总值的剩余部分。然后它将取这个值,不管它是什么数字,比如说它是4,它将取字符串“字母表”中的第四个字母,并将其设置为字符“字母”。然后它应该做的是打印出字母,后跟ASCII值的总和

下面是一个示例,说明了我的输入和预期结果,以及实际结果

车牌号码:CPR607

输出:E836

我使用完全相同的车牌输出为:

车牌号码:CPR607

n229

我不确定我做错了什么,但我最好的线索是,它是一个字符,它将其视为ASCII值,而不是字符串值(我正在尝试获取)

如果有人能提出一些建议,那将是一个很大的帮助。不一定是代码,我可以从中吸取教训,但我应该如何去做这件事的正确方式

更改这些行:

int one = (int) plate.charAt(0);
int two = (int) plate.charAt(1);
int three = (int) plate.charAt(2);
这将为您提供字符的实际ASCII值

如果你想要别的东西,你必须从每个值中减去一个常数,正如乔霍普金斯在他的评论中所说明的那样

减去64得到A=1,B=2等

我明白你的问题了

算法是获取前3个字符的ASCII值,并将其添加到数字中(最后3个字符)

此外,你必须除以6才能得到字母A-E。你要除以24

public static String model;
public static int letternum;
public static String plate;
public static String letter;
public static int total;              
public static String alphabet = "abcdefghijklmnopqrstuvwxyz";

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    //System.out.println("Car Model:");
    //model = input.nextLine();
    System.out.println("License Plate: ");
    plate = input.nextLine();

    char one = plate.charAt(0);
    char two = plate.charAt(1);
    char three = plate.charAt(2);
    total = Integer.parseInt(one) + Integer.parseInt(two) + Integer.parseInt(three);
    letternum = total % 24;

    char letter = alphabet.charAt(letternum);

    System.out.println("" + letter + total);

}

您忘记将其转换为整数

如果您将229值添加到车牌中的607中,您将得到您说应该得到的836号,因此看起来您的总变量是正确的,但您只需要将其添加到输入的数字中


其他人都在说的有关ASCII值移位的内容是在确定输出中的第一个字符时使用的。

您希望获取字符串的第二部分(包含三个数字)并将其添加到总数中。您可以使用以下方法获取该值:


Integer.parseInt(plate.split(“”[1])

因为您使用的是大写字母,所以得到的字符的整数值介于65和90之间
plate.charAt(…)-64
会让你知道字母在字母表中的位置,A=1,B=2,等等,所以如果我明白你的意思,那么,如果我输入cpr而不是cpr,它会起作用吗?我不确定我是否明白你说的话,除了我知道它在分配ASCII值,而且看起来你想把盘子右侧的三个数字(在你的例子中是607)加到总数中,但你没有在代码中这样做。你是如何得到预期结果的呢,这里的逻辑是什么?@SullyBrooks ASCII值对于字符“0”-“9”定义为48-57,对于字符“A”-“Z”定义为65-90,对于字符“A”-“Z”定义为97-122。根据你问题中倒数第二段,我假设你想要字母在字母表中的位置,所以你必须用该集合中第一个字符的ASCII值来偏移字符的ASCII值,在大写字母的情况下,该值为65。好的,所以就像另一个答案一样,你只是将值从char改为Int,现在当我这样做时,我的输出保持不变!谢谢你的帮助。还有其他建议吗?真的没有必要在这里打字。字符加法将自动将字符作为ASCII值这是我的想法,但我想我得到了我的解决方案。我真的应该给我的号码的车牌号添加ASCII值!好吧我试过了,但没变。现在我通过将值更改为int而不是char值来了解您正在做的事情。你还有什么其他的建议吗,因为到目前为止它还没有做任何事情:/请看我的评论。看起来你想把607加到总数上。这需要解析字符串的其余部分,您忽略了它。好的,我想我理解您的意思。我将使用ParseInt(what string/char)方法,对吗?我应该准确地解析哪个值?我想得太多了,但我想知道为什么要这么做。再次感谢您的帮助。@SullyBrooks。不,你不需要那种方法。无需将字符强制转换为整数。Sergey。我15岁了。如果你不想帮助别人学习如何制作有用的程序,请走开。好的,这看起来应该行得通。但你能帮我个大忙解释一下这到底是怎么回事吗?我试图确保我完全理解我的程序是如何工作的以及每个函数都做了什么。但是谢谢!您正在将字符串“CPR 607”拆分为两个字符串的数组:[“CPR”,“607”]。然后取第二个元素(它是[1],第一个是[0]),在Integer类中使用静态方法将“607”解析为int。好吧!我完全理解。非常感谢你的帮助!好的,谢谢!我一定要试试这个。