有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

有人能给我解释一下这段代码吗?关于用户输入、扫描仪等

有人能给我解释一下这个代码是怎么工作的吗

它允许用户输入数字,直到1000,然后打印原始输入的数字,偶数和奇数,全部在一个单独的数组中。但是我不明白当它输出偶数和奇数而不是偶数和奇数的数目时,有gem++gem1++的部分

在把这个

double even[] = new double[gem];
double odd[] = new double [gem1]; 

为什么它需要再次重复gem=0gem1=0?如果我问了太多的问题,我很抱歉,我只是感到困惑,我上周刚学了java

public class wutt {
    public static void main(String[] args) {

        Scanner s = new Scanner(System.in);
        System.out.print("Enter no. of elements you want in array : ");
        int n = s.nextInt();

        if (1 <= n && n <= 1000) {

            double a[] = new double[n];
            int gem = 0, gem1 = 0;

            System.out.println("Enter all the elements : ");
            for (int i = 0; i < n; i++) {
                a[i] = s.nextInt();
                if (a[i] % 2 == 0)
                    gem++;
                else
                    gem1++;
            }

            double even[] = new double[gem];
            double odd[] = new double[gem1];

            gem = 0;
            gem1 = 0;

            for (int i = 0; i < a.length; i++) {
                if (a[i] % 2 == 0) {
                    even[gem] = a[i];
                    gem++;
                } else {
                    odd[gem1] = a[i];
                    gem1++;
                }
            }

            System.out.println("Original: " + Arrays.toString(a));
            System.out.println("Odd: " + Arrays.toString(odd));
            System.out.println("Even: " + Arrays.toString(even));

        } else
            System.out.print("Invalid input");
    }
}

共 (3) 个答案

  1. # 1 楼答案

    如果希望在用户输入大于1000或小于0的数字后程序停止,则需要在if条件中添加break语句

    if (size < 0 || size > 1000) {
        System.out.println("Size must be between 0 and 1000");
        break;
    }
    
  2. # 2 楼答案

    double even[] = new double[gem]; double odd[] = new double [gem1];之前的代码试图获取发生的几率数和偶数数,并将所有输入的元素放入数组a。 在所有这些之后,现在我们得到的是一个名为a的数字数组,包含所有输入的元素。两个数字分别是gem和gem1,其中包含发生的几率和偶数。 所以 我们得到gem(numberOfEvens)、gem1(numberoftoffics)和list a

    接下来,我们需要将a的所有赔率放入一个名为odd[]的新数组,大小为gem1,然后 将a中的所有even放入一个名为偶数[]且大小为gem的新数组。此时,变量gem1和gem的任务完成了。它们变得毫无用处

    现在,我们需要遍历列表,选择奇数和偶数,然后按顺序将它们逐个放入数组中。这就是为什么我们需要两个初始化为0的新变量。 在这种情况下,因为gem和gem1是无用的,所以它们被重新分配来帮助操作树数组aodd[]even[]

  3. # 3 楼答案

    因此,用户在数组中输入他/她想要的元素数(n

    double a[] = new double[n];   // a is the array that is initialised to accommodate n elements
    int gem = 0, gem1 = 0;        // gem is the counter for "even" numbers and "gem1" the counter for odd numbers, and like every good counter, they start at 0
    
    System.out.println("Enter all the elements : ");
    for (int i = 0; i < n; i++) {     // so we ask the user to input n elements
        a[i] = s.nextInt();           // here we read every input and put it in the a array
        if (a[i] % 2 == 0)            // if the new number is even
            gem++;                    // we increase the even counter "gem"
        else                          // otherwise, when it is an odd number
            gem1++;                   // we increase the odd counter
    }
    
    double even[] = new double[gem];  // now we create a new array where we want to hold all the even numbers, we do that by telling it how many even numbers we have counted before (gem)
    double odd[] = new double[gem1];  // and a new array for all odd numbers (gem1 was our counter)
    
    gem = 0;                          // now we reinitialise the counters, because we want to start from the beginning
    gem1 = 0;
    
    for (int i = 0; i < a.length; i++) { // in order to copy all numbers from the a array into the two other arrays for even and odd numbers, we iterate over the whole length of the a array. i is the index for the "a" array
        if (a[i] % 2 == 0) {             // ever even number we encounter
            even[gem] = a[i];            // we put in the even array
            gem++;                       // while gem, the "even numbers counter" is our index for the "even" array
        } else {
            odd[gem1] = a[i];            // odd numbers are for the odd array
            gem1++;                      // while the former "odd numbers counter" now serves as our "odd" array index
        }
    }
    

    差不多就是这样。首先,用户在一个数组中输入所有数字,然后简单地计算输入的奇数和偶数

    然后创建两个新数组,一个用于偶数,另一个用于奇数,由于我们计算了它们,我们知道这两个新数组必须有多大

    最后,所有的数字再次被迭代,并放入相应的数组中。 最后有3个数组,一个包含所有数字,一个包含偶数数字,另一个只包含奇数数字

    编辑

    以下是在不改变该方法性质的情况下可以进行的一些小改动:

    double allNumbers[] = new double[n];  // "allNumbers" is way more specific than "a"
    int oddCounter = 0;                   // "oddCounter" instead of "gem"
    int evenCounter = 0;                  // numbers in variables like "gem1" is really bad practice, because numbers don't say anything about the nature of the variable
    
    System.out.println("Enter all the elements : ");
    
    for (int i = 0; i < n; i++) {
        allNumbers[i] = s.nextInt();
        if (allNumbers[i] % 2 == 0) {
            evenCounter++;
        } else {
            oddCounter++;
        }
    }
    // until here nothing changes but the names
    
    double even[] = new double[evenCounter];
    double odd[] = new double[oddCounter];
    
    int oddIndex = 0;                   // and here we create new variables, instead of reusing old ones
    int evenIndex = 0;                  // there is absolutely no performance gain in reusing primitives like this - it's just confusing
    for (int i = 0; i < allNumbers.length; i++) {
        if (allNumbers[i] % 2 == 0) {
            even[evenIndex++] = allNumbers[i];   // the "++" can be done directly in the first expression. that's just to make it shorter.
        } else {
            odd[oddIndex++] = allNumbers[i];     // it is not more performant nor easier to read - just shorter
        }
    }
    

    编辑(再次)

    这就是数组的样子,比如当你输入4个数字时:

    gem = 0
    gem1 = 0
    n = 4               // user said 4 
    a = [ , , , ]       // array a is empty but holds the space for 4 numbers
    
    a = [1, , , ]       // user enters 1
         ^
        i=0
    
    gem1 = 1            // 1 is an odd number -> gem1++
    
    a = [1,4, , ]       // user entered "4"
           ^
          i=1
    gem = 1             // 4 is an even number -> gem++
    
    a = [1,4,2, ]       // user entered "2"
             ^
            i=2
    gem = 2             // 24 is an even number -> gem++
    
    a = [1,4,2,7]       // user entered "7"
               ^
              i=3
    gem1 = 2             // 7 is an odd number -> gem1++
    
    
    then we fill the other arrays
    
    even = [ , ]          // gem is 2, so we have 2 even numbers
    odd  = [ , ]          // gem1 is 2, so we have 2 odd numbers
    
    a = [1,4,2,7]
         ^ 
        i=0
    
    odd[1, ]    // for i=0, a[i] is 1, which is an odd number
    
    a = [1,4,2,7]
           ^ 
          i=1
    
    even = [4, ]    // for i=1, a[i] is 4, which is an even number
    
    a = [1,4,2,7]
             ^ 
            i=2
    
    even = [4,2]    // for i=2, a[i] is 2, which is an even number
    
    a = [1,4,2,7]
               ^ 
              i=3
    
    odd = [1,7]    // for i=3, a[i] is 7, which is an odd number
    
    and in the end you have
    
    a    = [1,4,2,7]
    even = [4,2]
    odd  = [1,7]