问题:100张多米诺骨牌整齐的排成一列,依顺序编号1.2.3.——99.100。第一次拿走所有奇数位置的骨牌,第二次再从剩余的骨牌中拿走所有奇数位置上的骨牌。依此类推。问最后剩下的一张骨牌的编号是多少?下面是我写的 有错 请问怎么改 谢谢import java.util.*;
public class Test{
ArrayList bl=new ArrayList();
public ArrayList a(ArrayList al){
bl.clear();
for(int i=1;i<=al.size();i=i+2){
bl.add(al.get(i));
}
System.out.println(bl.get(0));
return a(bl);
}
public static void main(String []args){
ArrayList cl=new ArrayList();
for(int i=1;i<=100;i++){
cl.add(i);
}
Test t=new Test();
t.a(cl);
System.out.println(t.bl.get(0));
}
}
public class Test{
ArrayList bl=new ArrayList();
public ArrayList a(ArrayList al){
bl.clear();
for(int i=1;i<=al.size();i=i+2){
bl.add(al.get(i));
}
System.out.println(bl.get(0));
return a(bl);
}
public static void main(String []args){
ArrayList cl=new ArrayList();
for(int i=1;i<=100;i++){
cl.add(i);
}
Test t=new Test();
t.a(cl);
System.out.println(t.bl.get(0));
}
}
解决方案 »
- 今年7月差不多开始实习,我现在java只知道基础语法,如何才能提升
- java 也能直接操作硬件?(不通过*.c, *.cpp 等)
- 有什么办法,可以使java程序运行时在任务栏中不显示
- 这个对等的结构,可以相互通信
- 一个关于父类子类的问题
- 锁屏
- 线程实现密码的抹去
- 搜寻关于JAVA的电子书籍的下载网站,关于电脑技术的都可以,谢谢各位!
- 我用JDBC连接的ACCESS数据库,有一个first1字段,有2000个值,我想每次去5个,改怎么做?
- JSDK1.3中为什么找不到jsdk.jar这个文件?
- 请大家来讨论Integer.bitCount方法为什么要这么实现!附上一个类似的方法的实现,请指正。
- 使用socket传送pdf文件的问题
可能会对你有帮助:
http://community.csdn.net/Expert/topic/4157/4157909.xml?temp=.2725946
第一,Text类中的BL和AL指向同一个ArrayList对象,所以,当你clear()的时候,AL也clear了,所以就有一个越界的异常....第二,楼主想用递归,可是递归最普通的格式就是IF(return X)else(return N),也就是说必须有一个递归结束的标志....
import java.util.*;
public class Test{
ArrayList bl=new ArrayList();
public ArrayList a(ArrayList al){
bl.clear();
if(al.size()>1){
for(int i=1;i<=al.size();i=i+2){
bl.add(al.remove(i));
}
System.out.println(bl.get(0));
return a(bl);
}
else return al;
}
public static void main(String []args){
ArrayList cl=new ArrayList();
for(int i=1;i<=100;i++){
cl.add(i);
}
Test t=new Test();
t.a(cl);
System.out.println(t.bl.get(0));
}
}
---------------------------------------/*问题可以理解为:
* 假设原来有一个盒子A,里面有一些各种颜色的珠子,要把盒子中的满足某条件的珠子挑出来
* 用ArrayList是很好的,因为ArrayList.add(Object a);就非常的形象...
*这个问题思路为
*
*必须有两个盒子,一个是原来的盒子A ,一个是暂时存放挑出的物品的盒子B
*
*那么步骤为:
*1.在原来的盒子A中把满足条件的珠子挑出来,放到暂存盒子B中
*2.挑完之后,把原来的盒子A的其他珠子丢掉(清空)
*3.再把暂存盒子B中的物品倒入原来的盒子A
*4.判断,如果现在盒子A中的珠子没有满足最终条件,则重复步骤1
* 如果盒子A中的珠子满足了条件,那么这个盒子就是所需要的盒子(返回)
*
* */import java.util.*;
public class choosebox
{
public static ArrayList choose(ArrayList first)
{
//temp即为暂时存放的盒子B
ArrayList temp=new ArrayList();
//把first中所需要的挑出来放到盒子B中
System.out.println("挑出来的是:");
for(int i=1;i<=first.size();i=i+2)
{
temp.add(first.get(i-1));
System.out.println(" "+first.get(i-1));
}
//挑完了,把first清空
first.clear();
//再把盒子B中的倒回first中
for(int i=1;i<=temp.size();i++)
{
first.add(temp.get(i-1));
//System.out.println(temp.get(i-1));
}
//判断,
if(first.size()==1)
{
//如果挑到剩下一个,则返回
return first;
}
else
{
//如果不是,则继续挑....
return choose(first);
}
}
public static void main(String []args)
{
ArrayList mybox=new ArrayList();
for(int i=1;i<=100;i++)
{
mybox.add(i);
}
choosebox.choose(mybox);
System.out.println("最后结果是:"+mybox.get(0));
}
}
就是在FOR循环里面
应该是for(int i=1;i<al.size();i=i+2)
而不是for(int i=1;i<=al.size();i=i+2)----------------------------------------------
我上面的代码错了,应该是:
import java.util.*;
public class choosebox
{
public static ArrayList choose(ArrayList first)
{
//temp即为暂时存放的盒子B
ArrayList temp=new ArrayList();
//把first中所需要的挑出来放到盒子B中
System.out.println("挑出来的是:");
for(int i=1;i<first.size();i=i+2)
{
temp.add(first.get(i));
System.out.println(" "+first.get(i));
}
//挑完了,把first清空
first.clear();
//再把盒子B中的倒回first中
System.out.println("倒回去的是:");
for(int i=1;i<temp.size();i++)
{
first.add(temp.get(i));
System.out.println(temp.get(i));
}
//判断,
if(first.size()==1)
{
//如果挑到剩下一个,则返回
return first;
}
else
{
//如果不是,则继续挑....
return choose(first);
}
}
public static void main(String []args)
{
ArrayList mybox=new ArrayList();
for(int i=1;i<=100;i++)
{
mybox.add(i);
}
choosebox.choose(mybox);
System.out.println("最后结果是:"+mybox.get(0));
}
}
private static final int[] numbers = new int[100];
public static int left = -1;
static {
for(int i = 0; i < 100; i++)
numbers[i] = i+1;
}
private static void pick(int[] lefts) {
int[] temp = new int[lefts.length/2];
for(int i = 0, j = 1; i < temp.length; i++, j+=2) {
temp[i] = lefts[j];
}
if(temp.length < 2) {
left = temp[0];
return;
}
/*
for(int i = 0; i < temp.length; i++)
System.out.print(temp[i] + " ");
System.out.println();
*/
pick(temp);
}
public static void main(String[] args) {
pick(numbers);
System.out.println(left + " is left.");
}
}最后剩下:64。去掉中间那段注释可以看到每一次拿掉以后的结果。
public static void main(String[] args) {
List list = new ArrayList();
for(int i=0; i<100;i++){
list.add(i+1+"");
}
while(list.size()>1){
for(int i=0; i<list.size();i++){
list.remove(i);
}
}
Conica.pl("The last is:"+list.get(0));
}
{
public static ArrayList removebox(ArrayList temp)
{
System.out.println("移除的是:");
for(int i=0;i<temp.size();i++)
{
System.out.println(temp.get(i));
temp.remove(i);
}
if(temp.size()>1)
{
return removebox(temp);
}
else
{
return temp;
}
}
public static void main(String[] agrs)
{
ArrayList mytext=new ArrayList();
for(int i=1;i<=100;i++)
{
mytext.add(i);
}
removeDemo.removebox(mytext);
System.out.println("最后结果是:"+mytext.get(0));
}}
for(int i=0; i<list.size();i++){
list.remove(i);
怎么理解啊
自己试试看。
import java.util.*;
/**
* TODO 功能描述
*
* @author cqs
* @version $Revision$
* @date 2006-3-18 14:14:49
*/
public class Test { /**
*
*/
public Test() {
super();
// TODO Auto-generated constructor stub
} public static void main(String[] args) {
List list = new ArrayList();
for(int i=0; i<100;i++){
list.add(i+1+"");
}
while(list.size()>1){
for(int i=0; i<list.size();i++){
list.remove(i);
}
}
System.out.println("The last is:"+list.get(0));
}}
楼上的完全可以,思路很妙
Dan1980(不用IDE的大傻瓜) ( ) 信誉:98 2006-3-18 2:35:15 得分: 0
/*
* Created on 2006-3-18
*
* TODO To change the template for this generated file go to Window -
* Preferences - Java - Code Style - Code Templates
*/
package com.pss.test2;import com.pss.util.prints.Conica;public class Dominos {
private static final int[] numbers = new int[100]; public static int left = -1;
static {
for (int i = 0; i < 100; i++)
numbers[i] = i + 1;
} private static void pick(int[] lefts) {
int[] temp = new int[lefts.length / 2];
for (int i = 0, j = 1; i < temp.length; i++, j += 2) {
temp[i] = lefts[j];
}
if (temp.length < 2) {
left = temp[0];
return;
}
/*
* for(int i = 0; i < temp.length; i++) System.out.print(temp[i] + " ");
* System.out.println();
*/
pick(temp);
} public static void main(String[] args) {
long start = System.currentTimeMillis();
int count = 0;
while (count < 100000) {
pick(numbers);
System.out.println(left + " is left.");
count++;
}
long end = System.currentTimeMillis();
Conica.pl("It cost " + (end - start) + "ms");
}
// when count=1,cost 0
// when count=10,cost 0
// when count=100,cost 47
// when count=1000,cost 172
// when count=10000,cost 547
// when count=100000,cost 5187
// 以上单位毫秒
}
TONYBLARED(奔放的犀牛) ( ) 信誉:95 2006-3-18 3:34:46 得分: 0 public void fun01() {
List list = new ArrayList();
for (int i = 0; i < 100; i++) {
list.add(i + 1 + "");
}
long start = System.currentTimeMillis();
int count = 0;
while (count < 100000) {
while (list.size() > 1) {
for (int i = 0; i < list.size(); i++) {
list.remove(i);
}
}
Conica.pl("The last is:" + list.get(0));
count++;
}
long end = System.currentTimeMillis();
Conica.pl("It cost " + (end - start) + "ms");
// when count=1,cost 0
// when count=10,cost 0
// when count=100,cost 47
// when count=1000,cost 172
// when count=10000,cost 687
// when count=100000,cost 5250
// 以上单位毫秒
}大家可以看到,耗费的时间相差很少。我的程序相当棒。liang8305(七分之雨后) ( ) 信誉:100 2006-03-18 09:57:00 得分: 0
此程序通不过。其他的没去一一比较,有空者可以从效率的角度去比较。
private static final int[] numbers = new int[1000000];
public static int left = -1;
static {
for(int i = 0; i < numbers.length; i++)
numbers[i] = i+1;
}
private static void pick(int[] lefts) {
int[] temp = new int[lefts.length/2];
for(int i = 0, j = 1; i < temp.length; i++, j+=2)
temp[i] = lefts[j];
if(temp.length < 2) {
left = temp[0];
return;
}
pick(temp);
}
public static void main(String[] args) {
long start = System.currentTimeMillis();
pick(numbers);
long end = System.currentTimeMillis();
System.out.println(left + " is left.");
System.out.println("Cost " + (end - start) + " ms. ");
}
}输出:524288 is left.
Cost 31 ms. -------------------------------------------------------------------而用你的(稍作修改以通过编译):import java.util.*;
public class Dominos3 {
public static void fun01() {
List list = new ArrayList();
for (int i = 0; i < 1000000; i++)
list.add(i + 1 + "");
long start = System.currentTimeMillis();
while (list.size() > 1)
for (int i = 0; i < list.size(); i++)
list.remove(i);
System.out.println("The last is:" + list.get(0));
long end = System.currentTimeMillis();
System.out.println("It cost " + (end - start) + "ms");
}
public static void main(String[] args) {
fun01();
}
}在我的电脑上一分钟了还没结果,我只好换成100000再测,结果输出:The last is:65536
It cost 4688ms效率不言自明。
Cost 0 ms.
Dan1980(不用IDE的大傻瓜) 强!有机会多交流哈。
bl.add(al.get(i));
}不应该用for 循环遍厉数组,应该用ArrayList里面自己带的hasnext和next方法
for(int i = 0;i < array.length;++i)
if(array[i] != -1)
System.out.print(array[i] + " ");
System.out.println("count = " + count);
}
private static void Test08() {
final int range = 100;
int[] data = new int[range];
for (int i = 0; i < range; ++i)
data[i] = i + 1;
final int selector = 2; //you can change
int count;
do {
count = 0;
for (int i = 0; i < range; ++i) {
if (data[i] != -1) {
if (count % selector == 0)
data[i] = -1;
++count;
}
}
count = count * (selector - 1) / selector;
OutputArray(data, count);
} while (count > 1);
}result:64
{
private static void removeJS (List records)
{
for(int i=records.size()-1;i>=0;i-=2)
{
records.remove(i);
}
}
public static void main(String[] args)
{
int n=100;
List records = new ArrayList();
for(int i=0;i<n;i++)
{
records.add(""+(n-i));
}
do
{
removeJS(records);
System.out.println(records);
}while(records.size()>1);
System.out.println("last num is :"+records.get(0));
}}
public static void main(String[] args)
{
int i=1;
while(i<100)
i *= 2;
System.out.println(i/2);
}
}
String s1 = “aaa”;
String s2 = “aaa”;
这2句不是建立2个引用s1和s2,分别指向2个字符串对象吗
我看到书上说java中所有的对象都是建立在堆区的,分别建立这2个对象在内存中的地址不是就不一样了吗
而s1==s2不是比较他们的引用吗,这不是和c++中的比较地址差不多吗,怎么结果会为true呢因为刚刚学java,很多原理还不明白,望高人指点一下啊、