Java中的两个问题,若能解答,30分送上

问题1:类RanInt,一个成员变量为:一个整形数组a,构造方法RanInt(int n,int m)
用于创建一个RanInt的对象并使a储存n个不大于等于正整数m的随机整数。
方法int[] selects(int s):从a中选出是s的整数倍的数形成数组,并将该数组作为方法的的返回值。
方法:public String toString(int[] c):返回数组c的字符串表示,表示方式为:每个整数表示成相应的
文本形式再在之后加个空格。
编一个测试类,在主方法中创建一个RanInt类的实例对象,使对象中的数组存储20个不大于100的随机整数,然后
使用to-String方法将两个数组的字符串表达形式输出到Myf2.out文件中。
问题2:设计类PointSet。一成员变量:StringBuffer sb。构造方法:PointSet:
功能是确定直角平面坐标中符合以下条件的点:(1):在第一象限且坐标值都为正整数。(2):点到坐标原点的距离在
[100,100.2]范围内,每个点以(x,y)的形式存入sb中。
方法toString()功能是:返回根据sb转换成的字符串
设计测试类Myf2,在main方法中创建一个PointSet对象,输出符合上述条件的点。
第一个程序我是这么写的
class RanInt{
int a[];
int[] b=new int[a.length];//不确定的地方

RanInt(int n,int m){
a=new int[n];
for(int i=0;i<n;i++){
a[i]=(int)Math.random()*m;//Math.random返回大于0.0到小于1.0的双精度数
}
}
int[] select(int s){

for(int i=0;i<a.length;i++){
if(a[i]%s==0&&a[i]!=0)
b[i]=a[i];
}
return b;
}
public String toString(int []c){
String d="";
for(int i=0;i<b.length;i++)

d+=b[i]+" ";
return new String(d);
}
}
public class TestJava2 {
public static void main(String[] args) {
RanInt r=new RanInt(20,100);
System.out.println(r.select(3));//想不出来的方法
}
}
第二个程序是这么写的:
//输出为null
class PointSet{
StringBuffer sb;
double x,y=0;
PointSet(){
if(x>0&&y>0&&x<100&&y<100.2)
sb=sb.append(("["+x+","+y+"]"));
}
public String toString(){
String a=String.valueOf(sb);
return a;

}
}
public class TestJava3 {
public static void main(String[] args) {
PointSet p=new PointSet();
System.out.println(p);
}
}
有错误或者不懂之处,请指教。

我给你修改了下,加了点注释,你看看哦
第一个
import java.util.ArrayList;
import java.util.List;

class RanInt {
int a[];

RanInt(int n, int m) {
a = new int[n];
for (int i = 0; i < n; i++) {
//修改地方1,需要给整个后面的结果进行强制转换,否则你原来的结果,全部为0
a[i] = (int) (Math.random() * m);// Math.random返回大于0.0到小于1.0的双精度数
}
}

int[] select(int s) {

List<Integer> list = new ArrayList<Integer>();//修改地方2:因为数组里面能被S整除的个数未定,所以需要用List
for (int i = 0; i < a.length; i++) {
//原来的也没有错,只是从效率角度可以修改如下:
if (a[i] != 0 && a[i] % s == 0)//修改地方2:JAVA是截断式逻辑判断,因此先判断最快的:0判断,然后取模
list.add(a[i]);
}

//修改地方3:需要返回的是int数组
int[] b = new int[list.size()];
for(int i = 0; i <list.size(); i++){
b[i] = list.get(i).intValue();
}

return b;
}

public String toString(int[] c) {
// String d = "";//修改地方4:连接数字字符串,最好的就是用stringBuilder或者stringBuffer,
//防止字符自动转换为数字相加.这样也效率高
StringBuilder sb = new StringBuilder();
for (int i = 0; i < c.length; i++)
sb.append(c[i]).append(" ");
// d += b[i] + " ";
return sb.toString();
}
}

public class TestJava2 {
public static void main(String[] args) {
RanInt r = new RanInt(20, 100);
System.out.println("***********随机生成的数组如下:**********");
System.out.println(r.toString(r.a));
System.out.println("********选择后能被5整除的数组如下*****");
System.out.println(r.toString(r.select(5)));//随便选择一个数字吧,拿5来处理
// System.out.println(r.select(3));// 想不出来的方法
}
}
----------------------
***********随机生成的数组如下:**********
45 25 42 77 28 23 58 60 61 24 90 92 86 24 33 46 61 31 90 18
********选择后能被5整除的数组如下*****
45 25 60 90 90

第二个

class PointSet {
private StringBuffer sb;
private double x, y = 0;

public PointSet() {// 修改1:构造方法通常都要public,否则别人怎么调用呢?
double distance = Math.sqrt(x * x + y * y);// 点到原点之间的距离
if (x > 0 && y > 0 && distance >= 100 && distance <= 100.2) {
sb = new StringBuffer();
sb.append("(");
sb.append(x);
sb.append(",");
sb.append(y);
sb.append("");
}
}

public PointSet(double x, double y) {// 修改1延伸,增加一个构造点的方法
double distance = Math.sqrt(x * x + y * y);// 点到原点之间的距离
if (x > 0 && y > 0 && distance >= 100 && distance <= 100.2) {
sb = new StringBuffer();
sb.append("(");
sb.append(x);
sb.append(",");
sb.append(y);
sb.append(")");
}
}

public String toString() {
// String a=String.valueOf(sb);
// return a; //修改地方2: 可以直接使用StringBuffer.toString()方法返回的
if (sb == null) {
return "null";
} else {
return sb.toString();
}
}
}

public class TestJava3 {
public static void main(String[] args) {
PointSet p = new PointSet();// 因为默认为0,所以不符合第一象限的点,所以必定为null
System.out.println(p.toString());

PointSet p2 = new PointSet(100, 4.472);//对比期间,增加一个符合条件的点,输出为坐标
System.out.println(p2.toString());
}
}
-----------------
null
(100.0,4.472)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-02
第一个
import java.util.ArrayList;
import java.util.List;

class RanInt{
int[] a;
List<Integer> b = new ArrayList<Integer>();//不确定的地方

RanInt(int n,int m){
a = new int[n];
for(int i=0;i<n;i++){
//Math.random返回大于0.0到小于1.0的双精度数
double d = Math.random()*m;
a[i]=(int)d;
}
}
List<Integer> select(int s){
for(int i=0;i<a.length;i++){
if(a[i]%s==0&&a[i]!=0){
b.add(a[i]);
}
}
return b;
}
public String toString(int[] c){
String d="";
for(int i=0;i<b.size();i++)
d+=b.get(i)+" ";
return new String(d);
}
}
public class TestJava2 {
public static void main(String[] args) {
RanInt r=new RanInt(20,100);
List s = r.select(3);
for(int i = 0;i<s.size();i++){
System.out.println(s.get(i));
}
}
}
运行结果:
24
3
36
99
75
60
84
33

第二个
class PointSet {
StringBuffer sb = new StringBuffer();
double x = 1.2, y = 0.8;

public PointSet() {
if (x > 0 && y > 0 && x < 100 && y < 100.2)
sb = sb.append(("[" + x + "," + y + "]"));
else
System.out.println("x,y不在范围内");
}

public String toString() {
String a = String.valueOf(sb);
return a;

}
}

public class TestJava3 {
public static void main(String[] args) {
PointSet p = new PointSet();
System.out.println(p);
}
}
运行结果:
[1.2,0.8]
第2个回答  2011-03-03
class PointSet{
StringBuffer sb;
double x,y=0;
public PointSet(){
x=10;y=10;
sb=new StringBuffer();
if(x>0&&y>0&&x<100&&y<100.2)
sb.append("["+x+","+y+"]");
}
public String toString(){
return sb.toString();

}
}
public class TestJava3 {
public static void main(String[] args) {
PointSet p=new PointSet();
System.out.println(p);
}
}
第3个回答  2011-03-03
问题一 a[i]=(int)Math.random()*m; int强类型先会将0-1的浮点数转化 成0 再去*m 所以a中全部存0
int[] select(int s){
for(int i=0;i<a.length;i++){
if(a[i]%s==0&&a[i]!=0)
b[i]=a[i];
}
return b;
}
中 b与a公用一个i 当a[1]不能整除s时候 b【1】中就存部了数据了 所以b[i] 换成另外的变量 如b[j]

问题2:首先 条件):点到坐标原点的距离在
[100,100.2]范围内 应该是满足条件的点(x,y) 的表达式为100<(x^2 +y^2)<100.2
代码
class PointSet{
StringBuffer sb;
PointSet(){
//sb是一个容器 应该new出来
sb = new StringBuffer();
}

public void getSB(){

//是存储满足100<=(x^2 +y^2)<=100.2 的所有正整数点所以用双循环
//当然下面的循环范围大了 你可以自己通过几何图形来缩小范围,其实0x<11 和0<y<11就够了
for(int x=0;x<100.2;x++){
for(int y=0;y<100.2;y++){
if(100<=(x*x +y*y)&&(x*x +y*y)<=100.2){
//满足了条件
sb.append("x="+x+" ,y="+y+"\n");
}
}
}
}

public String toString(){
String a=String.valueOf(sb);
return a;
}

//测试
public static void main(String[] args) {
PointSet ps = new PointSet();
ps.getSB();
System.out.println(ps);
}
}

结果:x=0 ,y=10
x=6 ,y=8
x=8 ,y=6
x=10 ,y=0

//第一个问题没有给出具体的答案,但是你的问题我说清楚了,希望你自己弄一下,自己动手,丰衣足食
第4个回答  2011-03-02
dsafdsfdsafdfafdsf
相似回答
大家正在搜