私はSun/Oracle's java tutorialに行ってきましたので、Javaの方が流暢になることに興味があります。私はインターフェイスを実装するセクションにあり、演習の1つに解決策として与えたコードは理解していません。インターフェイスの実装に関するこのレッスンを理解するのを助けてください
exerciseは、java.lang.CharSequenceインターフェイスを実装することでした。実装では文字列を後方に返し、クラスをテストするための小さなメインメソッドを記述する必要がありました。 4つの方法すべてを必ず呼び出してください。
これはやや圧倒的なものだったので、私はそのコンセプトとそのコードを理解できるかどうかを調べるために解決策を開始しました。
1)charAt
メソッドを実装すると、charAt
メソッドの呼び出しが返されますが、これが何らかの無限ループを引き起こさないのはなぜですか?
ありがとうございます。ここで
コードは次のとおりです。
/* Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved. */
// CharSequenceDemo presents a String value -- backwards.
public class CharSequenceDemo implements CharSequence {
private String s;
public CharSequenceDemo(String s) {
//It would be much more efficient to just reverse the string
//in the constructor. But a lot less fun!
this.s = s;
}
//If the string is backwards, the end is the beginning!
private int fromEnd(int i) {
return s.length() - 1 - i;
}
public char charAt(int i) {
if ((i < 0) || (i >= s.length())) {
throw new StringIndexOutOfBoundsException(i);
}
return s.charAt(fromEnd(i));
}
public int length() {
return s.length();
}
public CharSequence subSequence(int start, int end) {
if (start < 0) {
throw new StringIndexOutOfBoundsException(start);
}
if (end > s.length()) {
throw new StringIndexOutOfBoundsException(end);
}
if (start > end) {
throw new StringIndexOutOfBoundsException(start - end);
}
StringBuilder sub =
new StringBuilder(s.subSequence(fromEnd(end), fromEnd(start)));
return sub.reverse();
}
public String toString() {
StringBuilder s = new StringBuilder(this.s);
return s.reverse().toString();
}
//Random int from 0 to max.
private static int random(int max) {
return (int) Math.round(Math.random() * max + 0.5);
}
public static void main(String[] args) {
CharSequenceDemo s =
new CharSequenceDemo("Write a class that implements the CharSequence interface found in the java.lang package.");
//exercise charAt() and length()
for (int i = 0; i < s.length(); i++) {
System.out.println(s.charAt(i));
}
//exercise subSequence() and length();
int start = random(s.length() - 1);
int end = random(s.length() - 1 - start) + start;
System.out.println(s.subSequence(start, end));
//exercise toString();
System.out.println(s);
}
}
's.charAt(fromEnd(i))'はjava.lang.Stringの 'charAt'メソッドを' s'がStringオブジェクトであるため実際に呼び出していますか? – ProfessionalAmateur
はい、そうです。 – duffymo