eclipse 使用数组显示用户输入的值

k4aesqcs  于 2023-06-22  发布在  Eclipse
关注(0)|答案(4)|浏览(177)

我有一个作业,我一整天都在做,我完成了它,它很有效,但不是我老师想要的方式,我已经绞尽脑汁了几个小时,没有任何运气
这是作业题
写一个程序,输入5个,每个值在10和100之间,当我读到的每个数字,只有当它不是一个重复的已经读过的数字时才显示它,为“最坏的情况”,其中所有五个数字都不一样,使用尽可能小的数组来解决这个问题。在用户输入每个新值后,显示输入的唯一值的完整集合。”
这是我写的代码

public static void main(String[] args) {
     Scanner input = new Scanner(System.in);
        int sid[] = new int[5];

        int count = 0; 
        int x = 0;
        int num = 0;

        while (x < sid.length) 
            {
            System.out.println("Enter number: ");
            num = input.nextInt();

            if ((num >= 10) && (num <= 100)) {
                boolean digit = false;
                x++;

                for (int i = 0; i < sid.length; i++) 
                 {   if (sid[i] == num)     
                     digit = true;
                 }  

            if (!digit) {

                    sid[count] = num;

                    count++;

            } 

                else

                System.out.printf("the number was entered before \n");

                      }

              else
               System.out.println("number must be between 10 and 100");

            for (int i =0;  i < x; i++) {
                System.out.print(sid[i] +" ");

            }

            System.out.println();  
        } 

        } 
    }

我的问题是输出是这样的

{
        Enter number: 
            11
            11 
            Enter number: 
            21
            11 21 
            Enter number: 
            34
            11 21 34 
            Enter number: 
            11
            the number was entered before
            11 21 34 0 
            Enter number: 
            44
            11 21 34 44 0

}

但是我的老师希望输出也是这样的,没有结尾,也没有将数组sid的值从sid[5]更改为sid[4]

{
        Enter number: 
            11
            11 
            Enter number: 
            21
            11 21 
            Enter number: 
            34
            11 21 34 
            Enter number: 
            11
            the number was entered before
            11 21 34  
            Enter number: 
            44
            11 21 34 44 

}

我试了好几个小时都没成功。
任何帮助都是赞赏的。
谢谢你。
干杯。

oxcyiej7

oxcyiej71#

您只需在输出循环中添加一个if条件。

for (int i =0;  i < x; i++) {
                if(sid[i]!=0)
                    System.out.print(sid[i] +" ");
            }
okxuctiv

okxuctiv2#

当你打印答案时,检查“0”并忽略它们。否则,当你发现当前的数字是重复的时,就减少x。

for (int i = 0; i < sid.length; i++) 
             {   if (sid[i] == num)     
                 digit = true;
                 x--;
             }

for (int i =0;  i < x; i++) {
            if(sid[i]!=0)
                System.out.print(sid[i] +" ");
        }

如果不需要使用数组,可以使用Sets。那就容易多了。

hmmo2u0o

hmmo2u0o3#

将x增量(x++)放入if (!digit)

if (!digit) {

    sid[count] = num;

    count++;

    x++;
}

从下面的if语句中删除x增量(x++

if ((num >= 10) && (num <= 100)) {
    boolean digit = false;
    x++;
}

这样零就被消除了,不管尝试了多少次重复,程序仍然运行。

gcxthw6b

gcxthw6b4#

import java.util.Arrays;
import java.util.Scanner;

class Example{
    public static void main(String args[]){
        Scanner scanner = new Scanner(System.in);
        int[] numbers = new int[5];

        int uCount = 0; //number of unique entries
        int entered = 0; //number of entered entries
        int num = 0;

        while(uCount<numbers.length){
            System.out.println("Enter number "+uCount);
            num = scanner.nextInt();
            if (num>=10 | num<=100){
                boolean isRepeat = false;
                entered++;

                for (int i = 0; i < numbers.length; i++) {
                    if(numbers[i]==num) isRepeat = true;
                }
                if(!isRepeat){
                    numbers[uCount] = num;
                    uCount++;
                }
            }
            else {
                System.out.println("Number should be between 10 and 100");
            }
        }
        System.out.println("Array is "+ Arrays.toString(numbers));
    }
}

相关问题