[Paiza] Ich habe mein eigenes Dienstprogramm zum Beantworten von Fragen erstellt. [Java]

■ Ich habe eine Java-Version des Paiza-Dienstprogramms erstellt.

Dies ist die Java-Version des zuvor veröffentlichten ** [[paiza] Ich habe mein eigenes Dienstprogramm zum Beantworten von Fragen [C #]] erstellt (http://qiita.com/ryo1224/items/3d20f4abbadd9318decc) **.

Java scheint allgemein xxx4j zu heißen, also habe ich es PaizaUtil4J genannt.

** Überarbeitetes Memo: **

[Versionen 1 und 2] Bisher wurden nur die Grundfunktionen nach Java portiert.

Die Funktionalität und Verwendung sind die gleichen wie in der C # -Version, daher werde ich diesmal darauf verzichten.

** (* '▽') Für diejenigen, die eine Erklärung benötigen, lesen Sie bitte den Artikel, den ich zuvor geschrieben habe. ** ** **

PaizaUtility.java



public class PaizaUtility
{
	public interface ITestIO
	{
		String readLine();

		void writeLine(String line);
	}

	public static class ConsoleProxy implements ITestIO
	{
		private final Scanner in = new Scanner( System.in );

		@Override
		public String readLine()
		{
			return in.nextLine();
		}

		@Override
		public void writeLine(String line)
		{
			System.out.println( line );
		}
	}

	static ITestIO io;

	// static ctor
	static {
		io = new ConsoleProxy();
	}

	public static Iterable<String> readArgs()
	{
		String s = io.readLine();
		int n = Integer.valueOf( s );

		return readArgs( n );
	}
	public static Iterable<String> readArgs(final int n)
	{
		List<String> args = new ArrayList<String>();

		for ( int i = 0; i < n; i++ )
		{
			String arg = io.readLine();

			args.add( arg );
		}

		return args;
	}

	public interface IFunction<TResult, TParameter>
	{
		TResult invoke( TParameter parameter );
	}
	public static Iterable<String> readArgs( IFunction<Integer, String> parseHeaderRecord ) {
		String header = io.readLine();
		int n = parseHeaderRecord.invoke( header ).intValue();

		return readArgs( n );
	}


	// static class.
	private PaizaUtility() { }
}

Do.Java (wo man die Antwortlogik für Paiza-Fragen implementiert)



public class Do
{
	public static void answer()
	{
//		//Wenn Sie den IFunction-Delegaten in Lambda schreiben, erhalten Sie diesen Code.
//		Iterable<String> args = PaizaUtility.readArgs(
//				s -> Integer.parseInt( s )
//		);
		Iterable<String> args = PaizaUtility.readArgs();

		for ( String arg : args )
		{
			PaizaUtility.io.writeLine( arg );
		}
	}
}

Program.Java (Haupteinstiegspunkt des Programms)



public class Program
{
	public static void main( String[] args )
	{
		PaizaUtility.io = new DebugIO();

		Do.answer();
	}
}

Die Implementierung der wesentlichen DebugIO-Klasse ist also noch nicht abgeschlossen.

◇ Temporäre Implementierung der aktuellen DebugIO-Klasse

Program.DebugIO


	private static class DebugIO implements ITestIO
	{
		//C für Java#Es gibt keine solche sequentielle Zeichenketten-Literalnotation wie diese. Es ist also langweilig. Was soll ich tun?
		private final String[] source = {
				"2",
				"hello",
				"world",
		};

		private int index = 0;

		@Override
		public String readLine()
		{
			return index < source.length ? source[index++] : null;
		}

		@Override
		public void writeLine(String line)
		{
			System.out.println( line );
		}
	}

◇ Probleme mit der DebugIO-Klasse.

In C # gibt es eine Syntaxspezifikation namens ** sequentielles String-Literal **, aber Java hat nicht die entsprechende Funktion. Aus diesem Grund können in der C # -Version die Fragenparameter von paiza so verwendet werden, wie sie vom Webbildschirm stammen, indem sie kopiert werden. In der Java-Version kann jedoch nicht dieselbe Hand verwendet werden. Was ist los?

◇ Es ist nicht wirklich wichtig

Entschuldigung für den C # -ähnlichen Codestil! !! Ich komme ursprünglich aus C #, nicht aus Java, und ich mag C # sprachlich besser als Java! !!

◇ Probleme mit der Java-Version

statisches Klassenproblem.

Sie können eine statische Klasse in C # erstellen, in Java jedoch keine statische Klasse.

Da Sie in Java keine statische Klasse erstellen können, fügen Sie der äußeren Klasse (auf der einschließenden Seite in Java) das statische Schlüsselwort nicht hinzu. Insbesondere aus diesem Grund wird das statische Schlüsselwort nicht zu den beiden Klassen PaizaUtility und Do hinzugefügt. Wenn Sie also so kopieren und einfügen, wie es ist, tritt ein Kompilierungsfehler auf.

Wenn Sie dies gewaltsam lösen möchten, können Sie die beiden fraglichen Klassen mit einer Dummy-Klasse umschließen und sie in das innere statische Element ablegen, aber ich frage mich, was es ist.

◇ Es gab einen Fehler > <

Es scheint, dass die Scanner-Klasse falsch verwendet wurde und normalerweise fehlerhaft war und nicht mit Paiza verwendet werden konnte. (Um genau zu sein, gab es Fälle, in denen es nicht verwendet werden konnte)

ConsoleProxy (vor der Änderung)



		@Override
		public String readLine()
		{
			return in.next();
		}

ConsoleProxy (nach Änderung)



		@Override
		public String readLine()
		{
			return in.nextLine();
		}

Was für ein Durcheinander (´ ・ ω ・ `)

Ich mache in Java nicht so viele Standard-E / A-Vorgänge, daher war ich beeindruckt von der Implementierung des offiziellen Paiza-Beispielcodes (https://paiza.jp/guide/samplecode). Es tut mir leid, dass ich es nicht gut überprüft habe, aber ...

Referenzinformationen: Es war hilfreich, weil es eine Person gab, die von einem ähnlichen Ort abhängig war.

Ich habe das Verhalten von Java Scanner und .nextLine () nicht gut verstanden

[Version 3] Unterstützung für sequentielle Zeichenfolgenliterale (Dateieingabe)

DebugIO (nur Auszug aus dem Konstruktor)



		public DebugIO()
		{
			super();
			this.source = readDataSource();
		}
		private static String[] readDataSource()
		{
			//Vorerst werde ich aus der Textdatei mit einem relativen Pfad lesen.
			Path path = Paths.get( "dat/datasource.txt" );

			try
			{
				return Files.lines( path ).toArray( String[]::new );
			}
			catch ( IOException ex )
			{
				//Es ist ein absolut unmöglicher Fall, also ist alles in Ordnung, aber ich werde es vorerst leeren.
				ex.printStackTrace();
				return new String[]{};
			}
		}

dat/datasource.txt


3
hoge
moge
piyo

Ausführungsergebnis


hoge
moge
piyo

■ Klicken Sie hier, um eine Reihe von Lösungen anzuzeigen

Die komplette Lösung finden Sie auf GitHub. In Zukunft möchte ich Kommentare hinzufügen, Funktionen verbessern und mit verschiedenen Dingen spielen.

https://github.com/sugaryo/PaizaUtil4J

Recommended Posts

[Paiza] Ich habe mein eigenes Dienstprogramm zum Beantworten von Fragen erstellt. [Java]
Ich habe meinen eigenen mit Ruby erstellten Blackjack für mein Portfolio aktualisiert
Ich habe meinen eigenen PC für tiefes Lernen gemacht. (Windows 10, Ubuntu18.04 Dual Boot)
Ich habe ein Diff-Tool für Java-Dateien erstellt
Ich habe mein eigenes Instagram-Tool wie Ruby [Ruby] erstellt.
Ich habe ein Roulette in Java gemacht.
[java] Was ich getan habe, als ich Listen in meiner eigenen Klasse verglichen habe
Erstellt eine Methode zum Anfordern von Premium Friday (Java 8-Version)
Ich habe eine shopify App @java erstellt
Ich habe eine Anmerkung in Java gemacht.
[Java Spring MVC] Ich möchte DI in meiner eigenen Klasse verwenden
Java für alle! Ich habe jedermanns Java #minjava gelesen
Ich habe Cassandras Object Mapper für Java ausprobiert
Ich habe ein Plug-In für IntelliJ IDEA erstellt
Ich habe ein neues Java-Bereitstellungstool erstellt