如何在void方法中使用包含switch语句的方法

时间:2017-12-28 14:45:24

标签: java android

我正在开发一款使用古老的Caesar Cipher加密一串文字的Android应用程序。

更具体地说,用户将在EditText视图中键入任意长度的字符串,然后按下将加密文本字符串的按钮。按下按钮时,必须加密字符串,然后将其打印到TextView上。

这是我的MainActivity类(它不完整):

public class MainActivity extends AppCompatActivity {

        EditText TextToMirror;
        TextView TextOut;
        Button Mirrorbtn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TextToMirror = (EditText) findViewById(R.id.TextToMirror);

    TextOut = (TextView) findViewById(R.id.TextOut);

    Mirrorbtn = (Button) findViewById(R.id.Mirrorbtn);

    Mirrorbtn.setOnClickListener(new View.OnClickListener() {

        /**The onClick method should get text from the edittext view,
         * crypt that text using the crypt method from the ceasar chiper method and then
         * print on the textview**/

        @Override
        public void onClick(View v) {

            TextOut.setText(TextToMirror.getText());

        }
    });
}

//Trying to access the crypt method from the ceasar chiper class

public void cryptxt (){
    CeasarCipher lock = new CeasarCipher();
    lock.crypt();
}
}

这是Caesar密码类:

public class CeasarCipher {

public char crypt (char alpha){

    switch (alpha){

        case 'A' : return 'D';
        case 'a' : return 'd';
        case 'B' : return 'E';
        case 'b' : return 'e';
        case 'C' : return 'F';
        case 'c' : return 'f';
        case 'D' : return 'G';
        case 'd' : return 'g';
        case 'E' : return 'H';
        case 'e' : return 'h';
        case 'F' : return 'I';
        case 'f' : return 'i';
        case 'G' : return 'J';
        case 'g' : return 'j';
        case 'H' : return 'K';
        case 'h' : return 'k';
        case 'I' : return 'L';
        case 'i' : return 'l';
        case 'J' : return 'M';
        case 'j' : return 'm';
        case 'K' : return 'N';
        case 'k' : return 'n';
        case 'L' : return 'O';
        case 'l' : return 'o';
        case 'M' : return 'P';
        case 'm' : return 'p';
        case 'N' : return 'Q';
        case 'n' : return 'q';
        case 'O' : return 'R';
        case 'o' : return 'r';
        case 'P' : return 'S';
        case 'p' : return 's';
        case 'Q' : return 'T';
        case 'q' : return 't';
        case 'R' : return 'U';
        case 'r' : return 'u';
        case 'S' : return 'V';
        case 's' : return 'v';
        case 'T' : return 'W';
        case 't' : return 'w';
        case 'U' : return 'X';
        case 'u' : return 'x';
        case 'V' : return 'Y';
        case 'v' : return 'y';
        case 'W' : return 'Z';
        case 'w' : return 'z';
        case 'X' : return 'A';
        case 'x' : return 'a';
        case 'Y' : return 'B';
        case 'y' : return 'b';
        case 'Z' : return 'C';
        case 'z' : return 'c';
        default: return alpha;

    }

}
}

好的,所以Caesar密码课程' job是扫描在应用程序的EditText视图中输入的文本字符串并加密字符串。 crypt (char alpha)方法是按钮用来加密EditText View中输入的字符串的方法。因此,crypt (char alpha)类将通过在MainActivity内创建CaesarCipher对象来使用MainActivity方法(请参阅上面的主要活动代码)。该对象允许我访问crypt方法。

因此,过去几周一直困扰着我的问题是这种crypt方法。由于它使用的是switch()语句,因此我无法在crypttext内的MainActivity方法中调用该方法。这是因为crypttext方法是一个void方法,crypt方法包含一个返回值的switch语句。我非常清楚虚空意味着NO RETURN值!

我向你们提出的问题是:我如何调用一种在空洞方法中返回值的方法?我尝试从void删除public void cryptxt (),但android工作室一直告诉我该方法名称无效'并且需要返回类型'。

请帮忙!

4 个答案:

答案 0 :(得分:1)

你只需要这样做:

public class MainActivity extends AppCompatActivity {

    EditText TextToMirror;
    TextView TextOut;
    Button Mirrorbtn;
    CeasarCipher lock;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextToMirror = (EditText) findViewById(R.id.TextToMirror);

        TextOut = (TextView) findViewById(R.id.TextOut);

        Mirrorbtn = (Button) findViewById(R.id.Mirrorbtn);
        lock = new CeasarCipher();
        Mirrorbtn.setOnClickListener(new View.OnClickListener() {

            /**The onClick method should get text from the edittext view,
             * crypt that text using the crypt method from the ceasar chiper method and then
             * print on the textview**/

            @Override
            public void onClick(View v) {

                String str = TextToMirror.getText().toString;
                StringBuilder temp=new StringBuilder("");
                for (int i = 0; i < str.length(); i++) {

                    temp.append(lock.crypt(str.charAt(i)));

                }

                TextOut.setText(temp);

            }
        });
    }

答案 1 :(得分:0)

您问题的答案

HOW DO I CALL A METHOD THAT HAS TO RETURN A VALUE WITHIN A VOID METHOD? 

不是,你不能这样打电话。 Java中的一个方法必须有一个返回类型,甚至可以是 void ,这意味着什么,但你必须在那里写,让编译器什么都不返回。

如果在你的情况下它返回,下面的方法也很有用。因为您要打印加密值,如果您返回 void ,则无法打印加密值,因此请将其更改为获取加密值。

 public char cryptxt (char temp){
    CeasarCipher lock = new CeasarCipher();
    return lock.crypt(temp);
}

现在在呼叫方面就像这样打印。

 @Override
        public void onClick(View v) {

            //use encrypted value
            String str = TextToMirror.getText().toString;
            for(int i=0; i<str.length();i++){
               char ch = str.charAt(i);
               char temp  = cryptxt(ch) 
               TextOut.setText(temp);
            } 

        }

答案 2 :(得分:0)

如果要调用方法返回某些内容(void以外的方法),则需要对此方法返回的值执行某些操作,例如:

public int something() {
    return 128;
}

public void nothing() {
    int assignedReturnValue = something();
}

如您所见,something()返回int,我将该方法的结果分配给int变量。如您所见,void方法本身不返回任何内容,但它只是一个简单的示例,说明如何调用方法返回方法中返回任何内容的东西。

顺便说一下,我建议你将char转换为int s并添加到此转换值为3的结果,而不是创建非常长的switch语句。您需要在简单的if-else语句中处理它,以使其正常工作。

答案 3 :(得分:0)

这就是我创建的自定义函数,仅用于为字母表设置密码。 在其中我传递了我想要密码的字符串,而不是它返回转换后的密文。有关ASCII的更多详细信息,请参阅Alphabetical ASCIIMore details about ASCII

我会帮助你。

#include<stdio.h>
#include<ctype.h>

main()
{
    int num[10];
    int i, j, cnt=0;
    char rept;

    printf("Enter 10 numbers: \n\n");

    for(i=0; i<=9; i++)
    {
        printf("Number %d =  ", i+1);
        scanf("%d", &num[i]);

            fflush(stdin);

        if ( !isdigit(num[i]) )
            {
                printf("OK\n");
            }
        else
            {
                printf("Invalid number. Enter again.\n");
                i=i-1;
            }
    }


    do
    {

    printf("\nEnter the number to be searched in array:  ");
    scanf(" %d", &j);

    for (i=0 ; i<=24; i++)
    {
        if(num[i]==j)
            cnt++;

    }

        if(cnt>0)       
         printf("\nNumber %d is present at %d places", j, cnt);
         else
            printf("\nNumber not present.");

            printf("\n\nDo you want to search another number. Press Y to repeat. Any other key to exit");
            fflush(stdin);
             scanf("%c", &rept);


    }while (rept=='y'||rept=='Y');

    getch();

}