Java 一个数组乘以一个不工作的数组

Java 一个数组乘以一个不工作的数组,java,android,arrays,int,Java,Android,Arrays,Int,首先:我是一名编程初学者,正在为学校做作业。我和一位同学正在申请一位教师,他有一个关于物理的网站 我们希望实现电子邮件地址+代码的验证。电子邮件的前6个字符在我的代码中得到一个数值*a var('sleutel')。我用了一个getNumber方法来表示:a=1,b=2,c=3。我想把这个字符串中的数字乘以。这是输入的代码应该是什么,以前进 例如:当您输入abc时,getNumber将其转换为123,乘以'sleutel'得到51015(1*5,2*5,3*5)。这就是问题所在:我想要的是:5*

首先:我是一名编程初学者,正在为学校做作业。我和一位同学正在申请一位教师,他有一个关于物理的网站

我们希望实现电子邮件地址+代码的验证。电子邮件的前6个字符在我的代码中得到一个数值*a var('sleutel')。我用了一个getNumber方法来表示:a=1,b=2,c=3。我想把这个字符串中的数字乘以。这是输入的代码应该是什么,以前进

例如:当您输入abc时,getNumber将其转换为123,乘以'sleutel'得到51015(1*5,2*5,3*5)。这就是问题所在:我想要的是:5*10*15。 但是代码给了我:5*1*0*1*5(=0…)

有没有(不同的)方法可以实现这一点?先谢谢你

if (email_text.getText().length() > 0
                && code_text.getText().length() > 0) {
            final String userEmail = email_text.getText().toString()
                    .substring(0, Math.min(6, email_text.length()))
                    .toLowerCase();
            final String userCode = code_text.getText().toString();


            String validCode = "";
            int sleutel = 3;
            for (int i = 0; i < userEmail.length(); i++) {
                validCode += getNumber(userEmail.charAt(i)) * sleutel;
            }

            int res = 1;
            for (char digits : validCode.toCharArray()) {
                res *= (digits - '0');
            }
            final String validCode2 = Integer.toString(res);

            if (userCode.equals(validCode2)) {
                Intent intent = new Intent(Login.this, Home.class);
                startActivity(intent);

            } else { // display toast}

private int getNumber(Character c) { return "abcdefghijklmnopqrstuvwxyz.-_@".indexOf(c) +1;
if(email_text.getText().length()>0
&&代码\u text.getText().length()>0){
最后一个字符串userEmail=email\u text.getText().toString()
.substring(0,Math.min(6,email_text.length())
.toLowerCase();
最后一个字符串userCode=code_text.getText().toString();
字符串validCode=“”;
int-sleutel=3;
对于(int i=0;i

}

下面的JavaSE应用程序满足您提供的示例的需要

很容易使代码适应您的Android应用程序

您没有弄清楚它在电子邮件中如何使用
@.
字符

public static void main(String[] args) {
    System.out.println(generateCodeFromEmail("abc"));
}

public static String generateCodeFromEmail(String email) {
    String emailSubstring = email.substring(0, Math.min(6, email.length())).toLowerCase();
    char[] chars = new char[emailSubstring.length()];
    email.getChars(0, emailSubstring.length(), chars, 0);
    int strotel = 5;
    int result = 1;

    for (char c : chars) {
        result *= ((int) c - 96) * strotel;
    }
    return String.valueOf(result);
}
如果
getNumber()
将“a”映射为1,“b”映射为2,…,“@”映射为29,则与
sleutel相乘时的可能范围(3)将为3-87。诸如“abck”之类的
字符串将映射为“12311”,与
sleutel相乘时将成为“36933”.但即使代码知道它是一个4位字符串,也无法知道它是如何分解的:

36933可以是3*6*9*33=5346(正确)或36*9*3*3=2916(不正确)或3*69*3*3=1863(不正确),等等

我不再将每个步骤存储为
字符串
,而是在一个
for
循环中执行所有操作:

if (email_text.getText().length() > 0 && code_text.getText().length() > 0) {
    final String userEmail = email_text.getText().toString().substring(0, Math.min(6, email_text.length())).toLowerCase();
    final String userCode = code_text.getText().toString();

    int sleutel = 3;
    long res = 1;
    for(int i=0; i<userEmail.length(); i++)    // loops through userEmail
       res *= getNumber(userEmail.charAt(i)) * sleutel;    // when the loop ends, res will have the correct value

    if (userCode.equals(Long.toString(res))) {
        Intent intent = new Intent(Login.this, Home.class);
        startActivity(intent);
    } else {...} // display toast
}
if(email\u text.getText().length()>0&&code\u text.getText().length()>0){
最后一个字符串userEmail=email_text.getText().toString().substring(0,Math.min(6,email_text.length()).toLowerCase();
最后一个字符串userCode=code_text.getText().toString();
int-sleutel=3;
长res=1;

对于(int i=0;iShouldn您不应该将您的sleutel变量与getNumber方法返回的值相乘,而不是使用加法吗?@mehmetgüngör抱歉,我已经对代码进行了很长一段时间的处理(以查看如何工作)是的,它应该是*而不是。但是它不起作用!你能显示getNumber方法的代码吗?@YoranY getNumber()函数应该为
@.
字符返回什么(对电子邮件有效)BTW,如果验证码中至少有一个0位的数字,你的RES整数可以是0,那么你就应该开始考虑这个变量了。你也应该考虑这个条件。谢谢!我已经知道答案会是这样的。但是…当用户电子邮件的长度超过6时,ValueCuD2就变成零了。我怎么解决这个问题呢?ils给了我负数。只是改变了我的方法,这更简单,你甚至不需要任何数据结构来存储中间步骤。一个
for
循环用于生成
res
得到负数的原因是
int
的最大值为2147483647(2^31-1)。例如,如果
userEmail
是“@@@@@@@@”,那么
res
应该是(29*3)^6=433626201009,远远超出
int
的范围。解决方案可能是改变算法,或者简单地将
res
设为
长,最大值为2^63-1=9*(10^18),远高于最大可能的
res
值(来自“@@@@@@”的433626201009)哇..你似乎对这个主题了解很多。非常感谢你帮助我。你从哪里学到这种东西的?(顺便说一句)事实上,我自己也是一个初学者,但互联网是一个很好的信息来源。例如,我不知道所有这些数字。谢谢。我已经编辑了我的问题,在那里你会找到getNumber方法,它处理@.\uChars。但是我需要把它放在我的代码中的什么地方呢?