一个数的除数列表

时间:2015-10-12 18:44:40

标签: java arrays while-loop joptionpane

这是我的第一篇文章,所以 DO 如果我写了一些愚蠢的话,就会骂我。

我刚开始参加IT课程,今天就开始了#34;而#34;循环课我的导师给了我们以下的作业:

  

编写一个读取自然数n的程序,并在一个图形框中显示所有除数的区间[2; N-1]。

到目前为止,我提出了一个有效的代码,但结果有点不对:

import java.util.Arrays;
import javax.swing.JOptionPane;

public class Divisors {
    public static void main(String[] args) {
        String n = JOptionPane.showInputDialog(null, "Enter a natural number");
        Integer i = Integer.parseInt(n);

        int d = i - 1;
        int x = 2;
        int[] dvr = new int[i]; // [i] because bigger numbers need more iterations

        while (x >= 2 && x <= d) {
            double y = i % x;

            if (y == 0) {
                dvr[x] = x;
                x = x + 1;
            } else {
                x = x + 1;
            }
        }

        JOptionPane.showMessageDialog(null, "The divisors of " + i + " are:\n" + Arrays.toString(dvr));
    }
}

问题是循环用很多零填充数组,导师结果的屏幕截图显示了一个只列出除数的窗口。

我尝试用ArrayList做这件事,但这对我来说是黑魔法,而我的导师并没有告诉我们如何使用除代码中使用的东西以外的任何东西。

任何帮助都非常感谢。

4 个答案:

答案 0 :(得分:4)

您遇到的主要问题是您将要打印一个未知数量的值,但是您正在使用数组来存储它们,并且数组具有固定大小。由于你有一个 var criticalSection = false; SomeOnClickEventFired = function () { if (!criticalSection) { criticalSection = true; //Ajax Time criticalSection = false; } } 数组,它将完全填充默认值为零。

理想情况下,您只打印数组的第一组非零值,但是您将存储分散在整个数组中的除数。

int将每个值存储在该值的索引处,实际上您应该将每个新值存储到数组中的下一个开放点。

创建一个单独的索引变量,并使用它来存储每个值:

dvr[x] = x;

然后当你的主循环完成后,你可以创建一个新的“显示数组”,它只包含除数,而不是零。此时, int index = 0; while (x >= 2 && x <= d) { ... if (y == 0) { dvr[index++] = x; ... 会告诉您确切需要多大的数据:

index

答案 1 :(得分:3)

在Java中,int的默认值为零。所以这就是你看到很多零的原因。

由于您将数组的大小定义为<?php if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } ?> <form action="upload.php" method="post" > Select image to upload: <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Upload Image" name="submit"> </form> ,因为除数的数量总是小于i,因此大于i

因此,不应该打印整个数组,而应该只打印到除此之外的除数的总数,而不是使用x

以下是修改后的版本,其中我使用单独的index变量来跟踪从0开始的除数的数量。最后,您可以将数组打印到index

import java.util.Arrays;
import javax.swing.JOptionPane;

public class Divisors {
public static void main(String[] args) {
    String n = JOptionPane.showInputDialog(null, "Enter a natural number");
    Integer i = Integer.parseInt(n);

    int d = i - 1;
    int index = 0;
    int x=2;
    int[] dvr = new int[i]; // [i] because bigger numbers need more iterations

    while (x >= 2 && x <= d) {
        double y = i % x;

        if (y == 0) {
            dvr[index] = x;
            x = x + 1;
            index= index + 1;
        } else {
            x = x + 1;
        }
    }

    JOptionPane.showMessageDialog(null, "The divisors of " + i + " are:\n" + Arrays.copyOfRange(drv, 0, index));
}
}

答案 2 :(得分:1)

protected void Button2_Click(object sender, EventArgs e) { string numOftextbox= TextBox1.Text.ToString(); int count = int.Parse(numOftextbox.Trim()); for (int j = 1; j <= count; j++) { string id = j.ToString(); TextBox txtfname = new TextBox(); txtfname.ID = "TextBox_" + id + "_"; txtfname.Width = 160; txtfname.EnableViewState = true; form1.Controls.Add(txtfname); form1.Controls.Add(new LiteralControl("<br/>")); } } 数据结构避免了重复,您可以使用它来克服重复除数被添加到数据结构中的问题。

Set

答案 3 :(得分:1)

使用ArrayList创建动态数组 以下代码将帮助您。
在您的计划中要改变的事情。

  
      
  1. import java.util。*;
  2.   
  3. 采用ArrayList varible
  4.   
  5. 在Arraylist对象上调用toString方法
  6.   
import java.util.*;
import javax.swing.JOptionPane;

public class NewClass3 {
    public static void main(String[] args) {
        String n = JOptionPane.showInputDialog(null, "Enter a natural number");
        Integer i = Integer.parseInt(n);

        int d = i - 1;
        int x = 2;
        List<Integer> dvr = new ArrayList<>();
        while (x >= 2 && x <= d) {
            double y = i % x;

            if (y == 0) {
                dvr.add(x);
                x=x+1;
            } else {
                x = x + 1;
            }
        }

        JOptionPane.showMessageDialog(null, "The divisors of " + i + " are:\n" + dvr.toString());
    }
}