莱鸟求老手解释为什么会出现以下问题

问题描述

大家好,有2个编码,现在是第一个:publicinterfaceFractionInterface{}

publicclassFractionimplementsFractionInterface{privateintdenominator;privateintnumerator;privateinti=0;privateintdenominatorArr[]=newint[2];privateintnumeratorArr[]=newint[2];publicFraction(){}publicFraction(intdenominator,intnumerator){this.denominator=denominator;this.numerator=numerator;denominatorArr[i]=denominator;numeratorArr[i]=numerator;System.out.println("Thevalueofiis"+i);//用来检查i的数值i++;}}

importjava.util.Scanner;publicclassTestFraction{publicTestFraction(){}publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);System.out.println("Pleaseenterthefirstfraction:");//要求使用者输入第一个分数Stringa=scanner.nextLine();intdenominator=Integer.parseInt(String.valueOf(a.charAt(2)));//例子:如果输入1/3,那么3将会被分配给denominatorintnumerator=Integer.parseInt(String.valueOf(a.charAt(0)));//例子:如果输入1/3,那么1将会被分配给numeratorFractionf1=newFraction(denominator,numerator);System.out.println("");System.out.println("Pleaseenterthesecondfraction:");//要求使用者输入第二个分数Stringb=scanner.nextLine();intdenominator1=Integer.parseInt(String.valueOf(b.charAt(2)));//例子:如果输入1/3,那么3将会被分配给denominatorintnumerator1=Integer.parseInt(String.valueOf(b.charAt(0)));//例子:如果输入1/3,那么1将会被分配给numeratorFractionf2=newFraction(denominator1,numerator1);}}

关于这个编码的问题是为什么i的值在i++之后还是0?增加之后不是应该变成1吗?++i和i++都试过了结果还是一样==以下是第一个编码的结果:第2个编码:publicinterfaceListInterface<T>{/**Task:Seeswhetherthelistcontainsagivenentry.*@paramanEntrytheobjectthatisthedesiredentry*@returntrueifthelistcontainsanEntry,orfalseifnot*/publicbooleancontains(TanEntry);//P2Q2publicvoidanotherToString();//P2Q3publicintgetPositionOf(TtargetObject);}

publicclassArrList<T>implementsListInterface<T>{privateT[]list;privateintcounter=0;privateintlength;privatestaticfinalintDEFAULT_INITIAL_CAPACITY=25;publicArrList(T[]arr){length=0;list=(T[])newObject[DEFAULT_INITIAL_CAPACITY];for(inti=0;i<arr.length;i++){list[i]=arr[i];counter++;}}publicArrList(){this(DEFAULT_INITIAL_CAPACITY);}publicArrList(intinitialCapacity){length=0;list=(T[])newObject[initialCapacity];}//checkwhetheranEntryiscontainedinthelistornot,ifcontained,returntrue,otherwisefalsepublicbooleancontains(TanEntry){booleanfound=false;for(intindex=0;!found&&(index<counter);index++){if(anEntry.equals(list[index])){found=true;}}returnfound;}//toStringforP2Q2-->TodisplaythelistpublicvoidanotherToString(){for(inti=0;i<counter;i++){System.out.println(list[i]+"n");}}//P2Q3-->ifcontains(targetObject)==true,return1,otherwise0publicintgetPositionOf(TtargetObject){intintOfBoolean=(contains(targetObject))?1:0;returnintOfBoolean;}}

这个没什么特别的,可以无视publicclassName{privateStringfirst;privateStringlast;publicName(){}publicName(StringfirstName,StringlastName){first=firstName;last=lastName;}publicvoidsetName(StringfirstName,StringlastName){setFirst(firstName);setLast(lastName);}publicStringgetName(){returntoString();}publicvoidsetFirst(StringfirstName){first=firstName;}publicStringgetFirst(){returnfirst;}publicvoidsetLast(StringlastName){last=lastName;}publicStringgetLast(){returnlast;}publicvoidgiveLastNameTo(NameaName){aName.setLast(last);}publicStringtoString(){returnfirst+""+last;}}

publicclassListGUI{publicstaticvoidmain(String[]args){//P2Q2Name[]nameArr={newName("Chris","Lim"),newName("Jenny","Chia"),newName("Kenny","Cheong")};ListInterface<Name>nameList=newArrList<Name>(nameArr);System.out.println("NameList");System.out.println("=========");nameList.anotherToString();//P2Q3NamesearchName=newName("Jenny","Chia");System.out.println("Thesearchresultis"+nameList.getPositionOf(searchName));}}

以下是结果:这个编码奇怪的地方是返回值竟然是0虽然JennyChia(NamesearchName=newName("Jenny","Chia");)和JennyChia(list里面的)是同一个东西==望老手能赐教

解决方案

本帖最后由 icebreath 于 2014-10-10 13:04:43 编辑
解决方案二:
第一个是因为没输入一个分数都会new一个Fraction对象,i是新生成的实例的属性,你第两次new的对象的i是新生成的当然为0.想实现你想的功能可以用静态变量,这个就是类所公有的属性了
解决方案三:
引用1楼s715575807的回复:

第一个是因为没输入一个分数都会new一个Fraction对象,i是新生成的实例的属性,你第两次new的对象的i是新生成的当然为0.想实现你想的功能可以用静态变量,这个就是类所公有的属性了

原来如此,那第一个我明白了可是第二个是什么一回事呢?
解决方案四:
NamesearchName=newName("Jenny","Chia");NamesearchName1=newName("Jenny","Chia");System.out.println(searchName.equals(searchName1));//false

因为你调用的是object的equals,你可以看下源码publicbooleanequals(Objectobj){return(this==obj);}

这里是用的==实质上是指内存是否相等,不同对象内存不同返回false;想实现该功能可以覆盖Name类的equals方法,具体比较Name里面各个属性是否相等
解决方案五:
引用3楼s715575807的回复:

NamesearchName=newName("Jenny","Chia");NamesearchName1=newName("Jenny","Chia");System.out.println(searchName.equals(searchName1));//false

因为你调用的是object的equals,你可以看下源码publicbooleanequals(Objectobj){return(this==obj);}

这里是用的==实质上是指内存是否相等,不同对象内存不同返回false;想实现该功能可以覆盖Name类的equals方法,具体比较Name里面各个属性是否相等

equals源码里的this是指什么东西?能解释下吗?0.0其实我写了这个方法,可是却有错误呢==publicbooleanequals(Objectobj){return((this.getName()&&((Name)obj).getName())&&(this.getName()&&((Name)obj).getName()));}

解决方案六:
引用3楼s715575807的回复:

NamesearchName=newName("Jenny","Chia");NamesearchName1=newName("Jenny","Chia");System.out.println(searchName.equals(searchName1));//false

因为你调用的是object的equals,你可以看下源码publicbooleanequals(Objectobj){return(this==obj);}

这里是用的==实质上是指内存是否相等,不同对象内存不同返回false;想实现该功能可以覆盖Name类的equals方法,具体比较Name里面各个属性是否相等

请看这个,别看4楼的==请问equals源码里的this是指什么东西?能解释下吗?0.0还有我写了这个方法,可是却有错误==@Overridepublicbooleanequals(Objectobj){return(this.getName()&&(((Name)obj).getName()));}

解决方案七:
都说了是,覆盖Name类的equals方法,你要比较的是Name对象要调用的是Name的方法,类似于@Overridepublicbooleanequals(Objectobj){if(objinstanceofName&&this.first.equeals(((Name)obj)).first){returntrue;}returnfalse;}}

没写完整,意会下

时间: 2024-08-30 17:28:16

莱鸟求老手解释为什么会出现以下问题的相关文章

求助 int num=030;求详细解释

问题描述 求助 int num=030:求详细解释 int num =030:System.out.println(num);为什么打印出来会是24呢??求大神详细解释 解决方案 楼主可以试试两个极端:你这里写的是int num = 030;由于在30前写了0就被编译器当成了8进制数据,8进制数据30就是10进制的24.你可以试试将语句改成:int num = 080;看看你的系统编译会不会报错 解决方案二: 030表示的是八进制数~ 解决方案三: 030是8进制的表示方式,转换成int十进制n

网站-php上传文件出现错误,求大家解释一下,怎么修改?

问题描述 php上传文件出现错误,求大家解释一下,怎么修改? 一共四个文件: 1. <?php require('config.php'); ?> <html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title><?=SITE_NAME?></title></head&g

hid-USB HID report 解析 求大牛解释

问题描述 USB HID report 解析 求大牛解释 如图1所示是USB HID的report descriptor. 是apple的一个触摸板. 图2 是发送的数据报文.这个不太能理解阿.为啥都解析不出来report id的值呢? 有大牛解释一下么?

布局-在鸟求TranslateX坐标移动问题

问题描述 在鸟求TranslateX坐标移动问题 请问怎么让TranslateX的移动距离等于grid布局的宽度呢? 也就是让image这个空间的X坐标从屏幕左边移动到屏幕右边,请问应该怎么写代码啊 解决方案 http://www.ziliao1.com/Article/Show/2124B60FA23B1F10D589452D02B5CD71.html

oralce 语句问题 求高手解释。

问题描述 oralce 语句问题 求高手解释. select to_number(to_char(add_months(a1.time_sh month - 1) 'yyyymm')) end_time--结束月份 to_number(to_char(a1.time_sh 'yyyymm')) start_timea1.time_sh from c_wzxx a1 解决方案 这自己搜一下add_months ,to_char,to_number 这几个函数的意思就行了

bash脚本-阿里云CPU使用率偏高,由于某个守护进程,求现象解释

问题描述 阿里云CPU使用率偏高,由于某个守护进程,求现象解释 昨天发现我阿里云的cpu莫名偏高,参见提问问了阿里云的技术支持,木有回答到点上,他们说是内存太高,但是我开了swap分区之后,也没有见到cpu使用率降低. 经过测试,发现,这个现象适合我写的一个进程守护脚本相关,谁能解释一下?脚本如下:#!/bin/bash while truedo process=ps -ef|grep /opt/tomcat7|grep -v grep if [ -z ""${process}&quo

new-[JAVA]数组 求代码解释

问题描述 [JAVA]数组 求代码解释 求代码解释 public class CouponCollector { public static void main(String[] args) { int N = Integer.parseInt(args[0]); boolean[] found = new boolean[N]; int cardcnt = 0; int valcnt = 0; while (valcnt < N) { int val = (int) (Math.random(

c语言-C语言选择题求详细解释

问题描述 C语言选择题求详细解释 已知:int a[3][4],*p=a[0];p+=7; ,那么与*p的值相同的是 A*(a+7) B*(&a[0]+7) C*(a[0]+3)D*(&a[1][1]+7) ====参考答案是B,求大侠给出详细解释 解决方案 就是偏移七个位置 然后再取值 解决方案二: 和之前回答的问题一样还是 指针的地址理解. 关键在于理解 &a[0]=p 解决方案三: 哪里出的考题?B也是错的,应该是: *(&a[0][0]+7) 解决方案四: a其实是

指针-C语言求教应该选哪个答案呢?并求详细解释

问题描述 C语言求教应该选哪个答案呢?并求详细解释 void *fun()此说明的含义是: A)fun函数无返回值 B)fun函数的返回值可以是任意的数据类型 C)fun函数的返回值是无值型的指针类型 D)指针fun指向一个函数,该函数无返回值 求教应该选哪个答案呢?并求详细解释 解决方案 答案选择:C 代码的意思是:定义一个函数指针. 比如:定义一个指向函数的指针,该函数有一个整形参数并返回一个整型值 int(*fun)(int): 再比如原来函数是void func(void): 那么定义的