Java 如何返回ArrayList中的最后一个字母并返回输入的字母总数?

Java 如何返回ArrayList中的最后一个字母并返回输入的字母总数?,java,if-statement,arraylist,Java,If Statement,Arraylist,我一直在尝试回答以下问题: 程序应不断提示用户输入字母,直到用户键入“!”,节目到此结束。每次用户输入字母时,程序应将该字母添加到之前输入的字母中,并打印结果。该程序还应返回: 输入“@”时最后输入的字母 输入“#”时输入的字母总数 我被困在如何返回最后输入的字母和返回输入的字母数上。我考虑过if语句,但它们似乎不起作用。以下是我目前的代码: import java.util.Scanner; import java.util.ArrayList; public class check {

我一直在尝试回答以下问题:

程序应不断提示用户输入字母,直到用户键入“!”,节目到此结束。每次用户输入字母时,程序应将该字母添加到之前输入的字母中,并打印结果。该程序还应返回:

  • 输入“@”时最后输入的字母
  • 输入“#”时输入的字母总数
我被困在如何返回最后输入的字母和返回输入的字母数上。我考虑过if语句,但它们似乎不起作用。以下是我目前的代码:

import java.util.Scanner;
import java.util.ArrayList;
public class check {

static Scanner input = new Scanner (System.in);
static ArrayList<String> array= new ArrayList<>();

public static void main(String[] args) {
    System.out.print("Please enter a letter: ");
    String a=input.nextLine();
    while ( !a.equals("!")) {
        array.add(a);
        for(String b : array) {
            System.out.print(b);
        }
        System.out.print("\n"+"Please enter a letter: ");
        a=input.nextLine();
    }
    // array.add(a);
    if((a.equals("#"))) {
        ArrayList.get(ArrayList.size()-1);
        for(String b : array) {
            System.out.print(b);
        }
    }
import java.util.Scanner;
导入java.util.ArrayList;
公共类检查{
静态扫描仪输入=新扫描仪(System.in);
静态ArrayList数组=新ArrayList();
公共静态void main(字符串[]args){
系统输出打印(“请输入一个字母:”);
字符串a=input.nextLine();
而(!a.equals(!”){
数组。添加(a);
for(字符串b:数组){
系统输出打印(b);
}
System.out.print(“\n”+”请输入一个字母:”);
a=输入.nextLine();
}
//数组。添加(a);
如果((a等于(#)){
获取(ArrayList.size()-1);
for(字符串b:数组){
系统输出打印(b);
}
}

我知道我所做的if语句是不正确的,因为它在下面给出了红线。但我不知道下一步该怎么做。

以下是您的代码逐行执行的操作:

虽然!不是按下的键,但将按下的键添加到名为“array”的字符串数组列表中。然后,打印出“array”中的每个字符串,然后等待下一次按键

如果按!键,则不会发生while循环(不会向数组中添加任何内容,也不会打印任何内容,也不会有.nextLine()

此时,如果最后一个键不是“#”,则不执行任何操作,程序将终止

ArrayList.get() //(this is a compilation error)
ArrayList.size() - 1 //(another compilation error).  
然后对进行静态调用

ArrayList.get() //(this is a compilation error)
ArrayList.size() - 1 //(another compilation error).  
要修复这些错误并清理代码以使其可读,应将其编写为:

if(a.equals("#")){ //Remove the superfluous parentheses
    array.get(array.size() - 1);
当您更改该行时,您现在将执行以下操作:如果最后一个键是“#”,则获取数组中的最后一个字符串并对其不做任何操作(我假设您在这里需要一个System.out.println(),就像处理array.get(array.size()-1)一样,但不将其分配给变量不会产生任何效果)。在基本上什么都不做之后,获取数组中的每个字符串并将其打印出来

如果你像这样说出你的代码在做什么,问题应该是显而易见的;这真的很有帮助!你必须稍微改变一下程序才能完成你想要的

在我看来,您要做的是一个while循环,它检查!a.equals(“!”),因为我们仍然希望!结束程序。但是,在while循环中,您需要在打印出数组中的值后添加一个if和一个else if:if检查输入的键是否为“@”,如果是,则打印一个…else if检查键是否为“@”“#”如果是print array.size()

如果您也在阅读赋值的要求,则可能是您应该执行字符串连接而不是填充ArrayList,即在while块外部和while块内部声明stringBuilder:

if (stringBuilder == null){
    stringBuilder = new StringBuilder(a);
}

stringBuilder.append(a);
//print stringBuilder and then print a or stringBuilder.length()

ArrayList.get(ArrayList.size()-1);
不正确,您不能以这种方式使用静态ArrayList。请使用
array.get
ArrayList.size()
它们输入了多少个字母?您可以取消设置并在每个字母的每个键上设置一个变量吗?您应该使用该变量而不是类。替换
ArrayList.get(ArrayList.size()-1)
by
array.get(array.size()-1)
。查看Java基础知识。您需要检查while循环中的特殊字符。您应该确保它们也没有添加到数组中。您说:“…执行array.get(array.size()-1)但不将其分配给变量没有任何作用)“,但是我如何分配变量呢?我现在正在努力解决这个问题。当然,它应该是:String lastStringInArray=array.get(array.size()-1);然后可以在print语句中使用lastStringInArray,就像System.out.println(lastStringInArray);不工作:(这是我做的:while(!a.equals(!”){array.add(a);for(String b:array){String lastStringInArray=array.get(array.size()-1);if(a.equals(“#”)System.out.println(lastStringInArray);else System.out.print(b);它给出了一个非常奇怪的输出