我写了一个永远不会停止的测试应用程序.它发布t.wait()(t是一个Thread对象),但我从不调用notify.为什么这段代码结束了?尽管主线程正在同步t,但生成的线程会运行,因此它不会锁定此对象.
public class ThreadWait {
public static void main(String sArgs[]) throws InterruptedException {
System.out.println("hello");
Thread t = new MyThread();
synchronized (t) {
t.start();
Thread.sleep(5000);
t.wait();
java.lang.System.out.println("main done");
}
}
}
class MyThread extends Thread {
public void run() {
for (int i = 1; i <= 5; i++) {
java.lang.System.out.println("" + i);
try {
Thread.sleep(500);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果是主线程等待5秒,在此期间工作人员给出其输出.然后在5秒钟结束后,程序退出.t.wait()不等 如果主线程不会睡5秒钟(注释这一行),那么t.wait() …
class MyObject {
int field;
public void setField(int arg1) {
this.field = arg1;
}
}
HashMap<String, MyObject> map;
...
... // put some MyObjects in the map with strings as keys
...
for (MyObject object : map.values()) {
object.setField(12345);
}
Run Code Online (Sandbox Code Playgroud)
我在循环中对对象所做的更改是在地图中的相同对象上进行的?
指南说明了这个values()方法
返回此映射中包含的值的Collection视图.该集合由地图支持,因此对地图的更改将反映在集合中,反之亦然.
"更改地图"是否意味着"对映射对象的更改"?那么这种setField方法可以改变地图中的对象吗?
这是使用 vb.net 发送电子邮件的代码片段:
Imports System.Net.Mail
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim SmtpServer As New SmtpClient()
Dim mail As New MailMessage()
SmtpServer.Credentials = New _
Net.NetworkCredential("username@gmail.com", "password")
SmtpServer.Port = 587
SmtpServer.Host = "smtp.gmail.com"
mail = New MailMessage()
mail.From = New MailAddress("YOURusername@gmail.com")
mail.To.Add("TOADDRESS")
mail.Subject = "Test Mail"
mail.Body = "This is for testing SMTP mail from GMAIL"
SmtpServer.Send(mail)
MsgBox("mail send")
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
End …Run Code Online (Sandbox Code Playgroud) 我在解决Euler项目的问题205时发现了这一点.问题如下:
彼得有九个四面(金字塔)骰子,每个骰子都有编号为1,2,3,4的面孔.科林有六个六面(立方体)骰子,每个骰子都有编号为1,2,3,4,5,6的面孔.
彼得和科林掷骰子并比较总数:总得分最高.如果总数相等,结果是平局.
金字塔皮特击败立方科林的可能性是多少?将您的答案四舍五入到0.abcdefg形式的七位小数
我用Guava写了一个天真的解决方案:
import com.google.common.collect.Sets;
import com.google.common.collect.ImmutableSet;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
public class Problem205 {
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
List<Integer> peter = Sets.cartesianProduct(Collections.nCopies(9, ImmutableSet.of(1, 2, 3, 4)))
.stream()
.map(l -> l
.stream()
.mapToInt(Integer::intValue)
.sum())
.collect(Collectors.toList());
List<Integer> colin = Sets.cartesianProduct(Collections.nCopies(6, ImmutableSet.of(1, 2, 3, 4, 5, 6)))
.stream()
.map(l -> l
.stream()
.mapToInt(Integer::intValue)
.sum())
.collect(Collectors.toList());
long startTime2 = System.currentTimeMillis();
// IMPORTANT BIT HERE! v
long solutions = …Run Code Online (Sandbox Code Playgroud) 我正在尝试按下btnExecute时执行例行程序.我在每个onClick btnxxx.setOnClickListener上收到错误,声明"新的View.OnClickListener(){}类型必须实现继承的抽象方法View.OnClickListener.onClick(View).请帮我理解什么是错的.
package com.androidbook.triviaquiz8;
import android.os.Bundle;
import android.os.Environment;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
public class QuizHelpActivity extends QuizActivity {
private EditText m1_sqs1;
private EditText m1_rs1;
private EditText m1_rs2;
private EditText m1_cd;
private EditText m1_els1;
private EditText m1_els2;
private EditText m1_sa_in;
private EditText m1_sa_ft;
private EditText m1_sa_mm;
private EditText m1_sa_m;
private EditText m1_ed_in;
private EditText m1_ed_ft;
private EditText m1_ed_mm;
private EditText m1_ed_m;
private Spinner m1_sqs1_spinner;
private Spinner m1_rs1_unit;
private Spinner m1_rs2_unit;
private …Run Code Online (Sandbox Code Playgroud) 我一直在努力解决这个问题,需要一些帮助。我需要找到最小/最大值并将它们打印出来用于多维数组。这是我尝试过的两种方法。
import java.util.*;
class MinMax {
public static void main(String[] args) {
int[][] data = {{3, 2, 5},
{1, 4, 4, 8, 13},
{9, 1, 0, 2},
{0, 2, 6, 3, -1, -8}};
Arrays.sort(data);
System.out.println("Minimum = " + data[0]);
System.out.println("Maximum = " + data[data.length - 1]);
}
}
Run Code Online (Sandbox Code Playgroud)
此版本符合但不运行。
import java.util.*;
class MinMax {
public static void main(String[] args) {
int[][] data = {{3, 2, 5},
{1, 4, 4, 8, 13},
{9, 1, 0, 2},
{0, 2, 6, 3, -1, …Run Code Online (Sandbox Code Playgroud) 我想执行一个substring.equals("\n"). 在下面的代码中,我取最后一个字符并检查它是否是换行符。
String substring = nextResult.length() > 1 ? nextResult.substring(nextResult.length() - 1) : nextResult;
return substring.equals("\n") ? /* do stuff */ : /* do other stuff */;
Run Code Online (Sandbox Code Playgroud)
我只取最后一个字符因为Java采用\n为一体char。但是,从我所见,substring.equals("\n")返回true空格 ( " "),我认为是制表符 ( \t)。是这样吗?
如何正确检查字符串的结尾是否为换行符,或者至少该字符串是否为换行符?
Object[]可以存储来自任何类的任何对象,因为Java中的每个类都会扩展java.lang.Object.
我不认为原语会延伸Object,为什么我们可以将它们存储起来如下?
Object[] obj_arr = {1, 2, 1.2, 'a', false, new MyClass(), null};
Run Code Online (Sandbox Code Playgroud)
问题是为什么原语可以存储在Object数组中并且在上面的代码中是否发生了自动装箱?
我试图将 JTable 显示为网格,单元格之间有线条。不过,我只能在单个单元格中添加边框,这看起来永远不正确;如果我添加完整的边框,我会得到一堆断开的框,看起来很丑陋和错误。使用 MatteBorders(如下面的代码)看起来会好一些,但会导致边界线不完全相交的间隙。
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component stamp = super.prepareRenderer(renderer, row, column);
int top = 1;
int left = 1;
int bottom = row == 7 ? 1 : 0; //Grid is always 8x8, this ensures the bottom/right will have full borders.
int right = column == 7 ? 1 : 0;
MatteBorder border = new MatteBorder(top, left, bottom, right, Color.BLACK);
if (stamp instanceof JComponent) {
((JComponent) stamp).setBorder(border);
}
return stamp;
}
Run Code Online (Sandbox Code Playgroud)
我觉得必须有某种方法可以正确地做到这一点,这样我才能在单元格元素之间获得网格线。我错过了什么?如果不出意外,有没有办法让 …
我读过你可以为对象添加额外的方法,或者以这种方式覆盖抽象方法,但是我有一个错误.你能告诉我这是否可能或我做错了什么?
public abstract class Pesti {
public abstract void ud();
}
public class EX2 {
public static void main(String[] args) {
Pesti p = new Pesti() {
public void ud() {
System.out.println("Pestele este ud!");
}
public void inn() {
System.out.println("Innoata!");
}
};
p.ud();
p.inn();
}
}
Run Code Online (Sandbox Code Playgroud)
它告诉我它找不到方法inn.
java ×9
android ×1
arrays ×1
autoboxing ×1
border ×1
dictionary ×1
email ×1
java-8 ×1
java-9 ×1
java-stream ×1
jtable ×1
loops ×1
max ×1
min ×1
performance ×1
primitive ×1
smtp ×1
string ×1
swing ×1
vb.net ×1