Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法获取访问字符串中字符的方法_Java_Android_Android Studio_Input_User Input - Fatal编程技术网

Java 无法获取访问字符串中字符的方法

Java 无法获取访问字符串中字符的方法,java,android,android-studio,input,user-input,Java,Android,Android Studio,Input,User Input,我正在尝试在Android Studio上制作一个凯撒密码应用程序。我已经准备好了XML文件和大多数其他代码,但无法继续执行代码中必须访问字符串的每个元素的点。我尝试过使用charAt()函数 另外,我只希望数组中点处的字符增加指定的数字,我这样说是因为我看到在“z”之后出现了像“|”这样的特殊字符,这对我来说很好。这是我的第一个应用程序,需要一些帮助。错误出现在第47行和第61行 这是我的密码: import androidx.appcompat.app.AppCompatActivity;

我正在尝试在Android Studio上制作一个凯撒密码应用程序。我已经准备好了XML文件和大多数其他代码,但无法继续执行代码中必须访问字符串的每个元素的点。我尝试过使用
charAt()
函数

另外,我只希望数组中点处的字符增加指定的数字,我这样说是因为我看到在“z”之后出现了像“|”这样的特殊字符,这对我来说很好。这是我的第一个应用程序,需要一些帮助。错误出现在第47行和第61行

这是我的密码:


import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity
{

    EditText input;
    EditText output;
    EditText num;

    String inp;
    String out;
    int choice;
    Character c;

    Button enc, dec;


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

        input = (EditText) findViewById(R.id.input);
        output= (EditText) findViewById(R.id.output);
        num = (EditText) findViewById(R.id.num);

        enc = (Button) findViewById(R.id.enc);
        dec = (Button) findViewById(R.id.dec);

        enc.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                inp=input.getText().toString();
                choice= Integer.parseInt(num.getText().toString());
                for(int i=0;i<input.length();i++)
                {
                    inp.charAt(i)= (char) (inp.charAt(i)+choice);
                }
            }
        });

        dec.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v1)
            {
                inp=input.getText().toString();
                choice= Integer.parseInt(num.getText().toString());
                for(int i=0;i<input.length();i++)
                {
                    inp.charAt(i)= (char) (inp.charAt(i)-choice);
                }
            }
        });
    }
}

导入androidx.appcompat.app.appcompat活动;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入android.widget.EditText;
公共类MainActivity扩展了AppCompatActivity
{
编辑文本输入;
编辑文本输出;
编辑文本数;
字符串inp;
串出;
智力选择;
字符c;
按钮enc,dec;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
输入=(EditText)findViewById(R.id.input);
输出=(EditText)findViewById(R.id.output);
num=(EditText)findViewById(R.id.num);
enc=(按钮)findViewById(R.id.enc);
dec=(按钮)findViewById(R.id.dec);
enc.setOnClickListener(新视图.OnClickListener()
{
@凌驾
公共void onClick(视图v)
{
inp=input.getText().toString();
choice=Integer.parseInt(num.getText().toString());

对于(int i=0;i我认为您的第一个问题是:

inp.charAt(i)= (char) (inp.charAt(i)+choice);
您正在尝试为方法返回赋值。这在Java中是不可能的

字符串在Java中是不可变的-如果要替换字符串中的值,必须构建一个新字符串并重新分配指向旧字符串的引用,而不是指向新字符串


可能还有其他问题我还没有机会讨论,但我相信这才是真正的问题。我不完全理解你想做什么,所以很遗憾,我无法建议你应该用什么来代替。我相信你的第一个问题是:

inp.charAt(i)= (char) (inp.charAt(i)+choice);
您正在尝试为方法返回赋值。这在Java中是不可能的

字符串在Java中是不可变的-如果要替换字符串中的值,必须构建一个新字符串并重新分配指向旧字符串的引用,而不是指向新字符串


可能还有其他问题我还没有机会讨论,但我相信这才是真正的问题。我不完全理解你想做什么,所以很遗憾,我不能建议你应该使用什么来代替。基于@corsiKa的答案,我建议如下。首先,将你的输入字符串转换为
字符[]

char[] array = inp.toCharArray();
现在,您可以迭代数组并修改其内容:

array[i] = array[i] + choice;
最后,您可以从该数组构建输出字符串:

output.setText(new String(array));

基于@corsiKa的答案,我建议如下。首先,将输入字符串转换为
char[]

char[] array = inp.toCharArray();
现在,您可以迭代数组并修改其内容:

array[i] = array[i] + choice;
最后,您可以从该数组构建输出字符串:

output.setText(new String(array));

感谢您的快速回复。那么您是否建议我必须创建一个新字符串,然后将值分配给此字符串并继续对新字符串进行操作?感谢您的快速回复。那么您是否建议我必须创建一个新字符串,然后将值分配给此字符串并继续对新字符串进行操作?哇,是的,先生。我想这个方法是我所希望的。我现在会尝试一下,看看它是否有效。请注意,
array[I]+choice
将有非常奇怪的行为-choice是一个int,array[I]是一个char。这确实会导致char,但您必须担心溢出-如果
array[I]=='z'
你期望值是什么?你可能可以做类似于
如果(数组[i]+choice>'z')choice-=26
的事情。是的,先生,我确实有一个奇怪的行为,但我输入了数组[i]=(char)array[i]+选择;再次您好,先生,很抱歉在过去的三天里我有一些大学考试。我今天完成了应用程序,在Android Studio IDE中,我有XML和主Java代码,没有任何错误。然后我插入手机进行应用程序安装,检查它是否正常工作,但没有。最初应用程序没有打开,w当我点击应用程序加载,但后来崩溃,说它已经停止工作或应用程序不断崩溃。最后,我有一个稳定的版本,这两个输入和输出。但问题是它崩溃时,我按下按钮加密或解密哇,是的,先生。我想这是我希望的方法。我会尝试一下,现在看看是否它是有效的。请注意,
array[i]+choice
将有非常奇怪的行为-choice是int,array[i]是char。这确实会导致char,但您必须担心溢出-如果
array[i]=='z'
您希望值是什么?您可能可以执行类似于
if(array[i]+choice>'z'的操作)choice-=26我想是吧。是的,先生,我确实有一个奇怪的行为,但我输入了数组[I]=(char)array[I]+选择;再次您好,先生,很抱歉在过去的三天里我有一些大学考试。我今天完成了应用程序,在Android Studio IDE中,我有XML和主Java代码,没有任何错误。然后我插入手机进行应用程序安装,检查它是否正常工作,但没有。最初应用程序没有打开,w当我点击应用程序,它用来加载,但后来崩溃,说它已经停止工作或应用程序不断崩溃。最后,我有一个稳定的版本,它采取了两个inpu