我只有6个月的Java经验(我也是新来的),所以如果我的代码看起来不完全正确,请原谅我。请注意,它仍然是一项正在进行中的工作。我试着写一个程序,接受字符串,只打印那些回文。
我应该: - 创建一个名为isPalindrome的方法,它有一个String参数,并且 - 根据字符串是否是回文返回一个布尔值。然后 - 修改主要方法以使用isPalindrome仅打印回文。
例如,如果我输入:“madam James apple mom timer”,它应该打印“madam”和“mom”。
这基本上就是我正在尝试编写的程序:例如:让我们使用“女士”这个词。程序将检查第一个和最后一个字母是否匹配(“madam”)。如果这是真的,那么它将检查下一个字母,这次是“a”和“a”(“madam)。依此类推。
这是我到目前为止的Java代码:
public class Palindrome
{
private String theWord; //Error: The value of the field Palindrome.theWord is not used
public boolean isPalindrome( String theWord ) {
int firstPointer = 0;
int secondPointer = theWord.length() - 1;
for ( int i = 0; i < theWord.length( ); i++ ) {
if ( theWord.charAt[0] == theWord.charAt (theWord.length() - 1) ) { //Error: charAt cannot be resolved or is not a field
return true;
}
return false;
}
}
public static void main( String[] theWord ) {
Palindrome = new Palindrome( ); //Error: Palindrome cannot be resolved to a variable
for ( int i = 0; i < theWord.length; i++ ) {
while (firstPointer < secondPointer) { //Error: "firstPointer" cannot be resolved to a variable. "secondPointer" cannot be resolved to a variable
if ( theWord.charAt[0] == theWord.charAt (theWord.length() - 1) ) { //Error: charAt cannot be resolved to a variable or is not a field. Cannot invoke length() on the array type String[]
firstPointer++; //Error: "firstPointer" cannot be resolved to a variable
secondPointer++; //Error: "secondPointer" cannot be resolved to a variable
}
System.out.println(theWord);
}
}
}
}
如果您能帮我知道我哪里出了问题,我将不胜感激。请不要只是给我正确的代码。我想弄清楚这一点。非常感谢你。
**编辑:我现在已经将错误作为注释包含在代码中。顺便说一句,我正在使用Eclipse。
--
if ( theWord.charAt(i) == theWord.charAt (theWord.length() - i - 1) ) {
leftPointer++;
rightPointer--;
我现在得到一个“不能在数组类型String[]上调用charAt(int)”和“不能在数组类型String[]上调用tend()”。这是剩下的两个错误,然后我将测试代码。我一直在尝试解决这些问题一段时间,但我仍然不完全确定这些错误意味着什么。
Eclipse建议我更改<b>这个词。字符(i)到这个词。长度这不是我想要的。它还建议我从<I>长度</I>中删除“()”,但我认为这也不正确。
最短的方法可能只是遵循定义:如果你反转字符串,它仍然相同,那么它就是一个回文:
public static boolean isPalindrome(String input)
{
String reverse = new StringBuilder(input).reverse().toString();
return input.equalsIgnoreCase(reverse);
}
但是如果有一个教育目标(?),并且出于某种原因应该使用迭代器,恕我直言,从字符串的外部向字符串的内部迭代更有意义。
public static boolean isPalindrome(String input)
{
int length = input.length();
for (int i = 0; i < length/2 ; i++)
{
if (input.charAt(i) != (input.charAt(length-1-i))) return false;
}
return true;
}
在您的示例中,您使用了主字符串[]
参数的输入。这里只是一些信息,以防您想手动将其拆分为单词。
相当于你现在得到的:
String[] words = phrase.split("\\s+");
for (String word : words)
{
// do stuff
}
split
方法使用分隔符将字符串
拆分为串[]
。分隔符\\s
是一个正则表达式,表示所有类型的空白(不仅是空格,还有制表符、新行字符等)。
但是它并不完美(你的方式也不完美),短语中仍然可以有逗号、点和其他标记。您可以使用Character.isLetterOrDigit
方法在迭代中过滤这些字符。或者,您可以执行替换(...)
来删除逗号、点和其他标记。或者您也可以使用更复杂的正则表达式。
第一条错误消息:“未使用字段的值”。错误消息是由全局私有字段theWord
引起的,因为它从未被使用过。它未被使用是因为您在方法isPalindrom(String theWord)
中也有一个同名的参数。每当您在该方法中引用theWord
时,它总是会在考虑全局变量之前为方法参数提供优势。
看起来你被困在这里有一个设计矛盾。回文
类到底是什么?有2个选项:
选项 1:工具箱:
public class Palindrome
{
// removed the private field theWord
// make this method static !!
public static boolean isPalindrome( String theWord ) {
...
}
public static void main( String[] theWord ) {
// remove the Palindrome object
// inside the loop check use the static method
// which does not require an object.
if ( Palindrome.isPalindrome(word))
{
}
}
}
选项2:一个对象
public class Palindrome
{
// keep the private field theWord
private String theWord;
public Palindrome(String theWord)
{
// set the value of the argument to the private field
this.theWord = theWord;
}
// don't make this method static
// also you don't need the parameter any more.
// it will now use the global field theWord instead of a parameter.
public boolean isPalindrome() {
...
}
public static void main( String[] theWord ) {
// inside the loop check use an object
Palindrome palindrome = new Palindrome(word);
if ( palindrome.isPalindrome())
{
}
}
至于关于第一个Pointer和第二个Pointer的错误。您需要定义并初始化这些变量。即 put int firstPointer = 0;
在循环之前。
好吧,让我们把每件事都分解成相当大的小块。
>
打印出字符串中的回文单词。
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Enter a sentence: ");
String sentence = scan.nextLine(); // 1.
String[] words = sentence.split(" ");
for (String word : words) { // 3.
if (isPalindrome(word)) {
System.out.println(word);
}
}
}
/**
* Check if the string is a palindrome.
* @param string
* @return True if string is palindrome.
*/
public static boolean isPalindrome(String string) { // 2.
for (int i = 0; i < string.length() / 2; i++) {
if (string.charAt(i) != string.charAt(string.length() - i - 1)) {
return false;
}
}
return true;
}}
方法/函数isPalinine是静态的,因为我们是从静态上下文中调用它,这是main函数。如果你想非静态地使用它,你可以把它放在一个类中并从该类创建一个对象。其余的应该是可以理解的。:-)
看看你的是Palindrome
方法:
if ( theWord.charAt(0) == theWord.charAt (theWord.length() - 1)
在这里,您总是将第一个字符与最后一个字符进行比较。在每次迭代中,您应该比较一对不同的字符,直到找到一对不匹配的字符,或者到达单词的中间。
你应该使用循环的 i
变量:
if ( theWord.charAt(i) == theWord.charAt (theWord.length() - i - 1)
返回值应该完全相反。如果发现一对不匹配的字符,则返回 false
。仅当循环结束而不返回 false 时
,才返回 true
。
问题内容: 我想在Java中使用池化连接(因为每个线程创建一个连接非常昂贵),所以我正在使用该对象。我正在跨线程保留我的数据源。因此,我在整个应用程序中仅使用一个数据源,如下所示: 现在,我已经创建了数据源,然后在每个单独的线程中执行以下操作: 我猜我很困惑, 这真的 是在 获取池连接吗? 这个线程安全吗?我注意到PooledConnection具有诸如notify()和wait()之类的方法…这
使用Fork-Join框架的资源,创建一个同步多线程系统,从三个文本文件中形成一个最大长度的单词集合。不要使用中间集合来读取文本。在本例中,工作由存储在MaxLengthWord类的arr字段中的数组表示。createSubtasks()方法递归地将任务分成更小的工作部分,直到每个工作部分都小于阈值。
什么是树上随机游走?我们可以假设给定一棵树,树的某个结点上有一个硬币,在某一时刻硬币会等概率地移动到邻接结点上,问硬币移动到邻接结点上的期望距离。 1. 树上随机游走用到的定义: ● 所讨论的树 ● 结点的度数 ● 结点与 v 结点之间的边的边权 ● 结点的父结点 ● 结点的子结点集合 ● 结点的兄弟结点集合 2. 向父结点走的期望距离 设代表 u 结点走到其父结点的期望距离,则有: 分
😭😭😭 团子我的团子终于带我走了,发出来让大家沾沾喜气 ⏳ 再发一遍进度(速通😋) 4.25下午一面 4.25晚上二面 4.26上午oc 4.26下午offer 基础技术部-对象存储 go语言 看面经可以看我之前帖子哈 #晒一晒我的offer#
为了澄清,在这种假设情况下,给的参数是由用户控制的,可以是任意的;我对它们没有确切的控制权(我不能禁止输入)。但是,我可以编辑。
这里的图片显示了我当前的问题,我尽最大努力修改路径。JAVA\u HOME的路径是正确的,但我一直很困惑,因为它总是显示出来,即使我已经修改了它。如果我尝试放置SDK的目录路径,则会出现相同的错误。 图像链接:https://i.stack.imgur.com/LeipD.png