【问题标题】:How to return last letter in ArrayList and return total number of letters entered?如何返回 ArrayList 中的最后一个字母并返回输入的字母总数?
【发布时间】:2014-06-06 03:01:18
【问题描述】:

我一直在尝试做一个如下的问题:

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

  • 输入“@”时最后输入的字母。
  • 输入“#”时输入的字母总数。

我不知道如何返回最后输入的字母和输入的字母数。我考虑过 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);
        }
    }

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

【问题讨论】:

  • ArrayList.get(ArrayList.size()-1); 不正确,您不能以这种方式使用静态 ArrayList。使用array.getarray.size()
  • 他们输入了多少个字母?你能在每个字母的每个键上取消设置并设置一个变量吗?
  • 你应该使用变量而不是类。将ArrayList.get(ArrayList.size()-1) 替换为array.get(array.size() - 1)。复习 Java 基础知识。
  • 您需要检查 while 循环中的特殊字符。您应该确保它们也没有添加到数组中。

标签: java if-statement arraylist


【解决方案1】:

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

同时!不是按下的键,将按下的键添加到称为“数组”的字符串的 ArrayList。之后,打印出“array”中的每个字符串,然后等待下一次按键。

如果!按下时,不会发生 while 循环(没有任何内容添加到数组中,没有任何内容打印出来,没有 .nextLine())。

此时,如果最后一个键不是“#”,则什么也不做,程序终止。如果是,请静态调用

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) 但不将其分配给变量什么都不做)。基本上什么都不做之后,取出数组中的每个字符串并打印出来。

如果你像这样说出你的代码在做什么,问题应该会很明显;它真的很有帮助!你将不得不稍微改变程序来完成你想要的。

在我看来,您想要做的是一个检查 !a.equals("!") 的 while 循环,因为我们仍然想要 !结束程序。但是,在 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()

【讨论】:

  • 你说:“......做一个array.get(array.size() - 1)但不将它分配给一个变量什么都不做)”,但我如何分配给一个变量? ?我现在正在为此苦苦挣扎。
  • 当然可以: String lastStringInArray = array.get(array.size() - 1);然后,您可以根据需要在打印语句中使用 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);
  • 它给出了一个非常奇怪的输出
猜你喜欢
  • 2013-09-15
  • 2015-06-13
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多