【问题标题】:Replacing an Element替换元素
【发布时间】:2020-10-22 07:55:12
【问题描述】:

我正在编写显示数组简单操作的代码。在我创建的数组中重新插入已删除的元素时,我似乎无法使其工作。我的目标是将另一个元素放在另一个已删除的元素中(当我删除一个元素时,它变为 0)。我的插入案例只是告诉重复输入,它不允许我在某个位置恢复已删除的元素。

          case 2:
         {
          if (limit1 < 5 || limit1 > 20){
            System.out.println("Error: Invalid Array Limit");
            System.out.println("Press Any Key To Continue...");
            new java.util.Scanner(System.in).nextLine();
            System.out.print('\u000C');
            m();
            }
            else{
            System.out.println("Enter the " + array.length + " numbers now. 
            Or enter -1 to exit");
            int i = 0;
            while(i < array.length){
               array[i] = in.nextInt();
               boolean dups = false;    
             if(array[i] != -1){
             for(int k = 0; k < i; k++)
                if(array[k] == array[i])
                {
                    System.out.println("Error: Duplicate Element");
                    System.out.println("Please Enter Another Value");
                    dups = true;
                    break;
                }
                if(!dups){
                i++;}
           }
           else{
               array[i] = 0;
               System.out.println("Exit Confirmed");
               System.out.println("Press Any Key To Continue...");
               new java.util.Scanner(System.in).nextLine();
               System.out.print('\u000C');
               m();
            }
        }
          System.out.println("You have entered the "+ limit1 + " numbers");
          System.out.println("Press Any Key To Continue...");
          new java.util.Scanner(System.in).nextLine();
          System.out.print('\u000C');
          m();
          } 
        } 

另一个问题是,如果我输入一个标记值 (-1),它只会使当前输入位置为 0。我只是希望退出案例而不是在该位置放置 0

【问题讨论】:

  • 您能否修剪您的代码以仅展示您遇到问题的代码?
  • 对不起,从问题或代码中我不清楚问题可能是什么。如果你只是让junit-testcases专注于核心功能而不是使用所有的控制台输入,也许所有这些都是可能的。

标签: java arrays switch-statement sentinel


【解决方案1】:

我发现您的代码存在一些问题。在没有任何break 语句的情况下使用switch 语句不是一个好习惯。您可以轻松地重构您的方法以使用这样的 while 循环:

public void e() {
    do {
        m();
        choice1 = in.nextInt();

        cls();
        if (choice1 > 0) {
            processChoice(); // contains switch block for processing input
        }
    } while (choice1 > 0); // Loop will terminate when user presses 0
}

这也应该在用户按下0 时退出您的程序。

我发现您的插入到数组块中存在问题。您似乎将从输入接收到的值直接分配给array[i]。在将其分配给array[i] 之后检查它是否是重复值有什么意义。我认为你应该这样做:

while (i < array.length) {
    int currentInput = in.nextInt();
    boolean dups = false;
    if (array[i] != -1) {
        for (int k = 0; k < i; k++)
            if (array[k] == currentInput) {
                System.out.println("Error: Duplicate Element");
                System.out.println("Please Enter Another Value");
                dups = true;
                break;
            }
        if (!dups) { // currentInput not a duplicate; assign to array[i]
            array[i] = currentInput;
            i++;
        }

关于退出提供​​-1,您可能应该删除此行array[i] = 0,以免将0分配给array[i]

if (array[i] != -1) {
    // ...
} else {
    System.out.println("Exit Confirmed");
    System.out.println("Press Any Key To Continue...");
    new Scanner(System.in).nextLine();
    System.out.print('\u000C');
    break;
}

【讨论】:

    【解决方案2】:

    以下是我在您的代码中发现的一些错误:

    • 你在字符串中间的System.out.plintln("Enter the " + array.length + "....");换行,你应该这样做:
    System.out.println("Enter the " + array.length + " numbers now." + "\nOr enter -1 to exit")
    
    • 如果输入为 -1,您不会立即退出,而是执行 array[i]=0(请记住,array[i] 现在是 array[-1])
    • 那么你在输入-1之后就不要中断循环
    • case 不应括在括号中,应始终以 break 结尾:
    case 1:
      //DO THINGS
      //....
      //...
      break;
    case 2:
      //DO OTHER THINGS
      //....
      //...
      break;
    

    以下是一些关于如何改进它的建议:

    • 我不太记得 Java,但我认为您不必每次都创建新的 Scanner
    • 如果我是你,我会首先检查输入是否为 -1(有几种方法可以做到)
    • for 不使用方括号有点混乱
    • 发现重复时你已经中断了,所以你不需要用if(!dups)再次检查它

    我希望这能解决你的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-29
      • 1970-01-01
      • 2016-11-07
      • 2015-03-02
      • 2021-09-29
      相关资源
      最近更新 更多